Если вы прочитали мой предыдущий пост, вы знаете, что я могу использовать пользовательские MembershipProvider и RoleProvider для использования разных источников данных при каждом вызове на лету.Я хочу сделать то же самое с Профилем.
Свойства моего профиля хранятся не в веб-конфигурации, а в пользовательском классе, подобном этому:
public class AccountProfile : ProfileBase
{
public override SettingsProviderCollection Providers
{
get
{
return base.Providers;
}
}
static public AccountProfile GetUserProfile(string userName)
{
return (AccountProfile)(ProfileBase.Create(userName));
}
[SettingsAllowAnonymous(false)]
public string MobilePhone
{
get { return ((string)(base["MobilePhone"])); }
set { base["MobilePhone"] = value; Save(); }
}
}
также как для Membership и RoleProviderУ меня есть такой класс:
public class MyProfileProvider : SqlProfileProvider
{
public MyProfileProvider()
{
}
public MyProfileProvider(string SubDomainInstanceName)
{
string configPath = "~/web.config";
Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);
ProfileSection section = (ProfileSection)config.GetSection("system.web/profile");
ProviderSettingsCollection settings = section.Providers;
NameValueCollection membershipParams = settings[section.DefaultProvider].Parameters;
Initialize(section.DefaultProvider, membershipParams);
}
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
base.Initialize(name, config);
if (!string.IsNullOrEmpty(instance))
{
// Update the private connection string field in the base class.
string connectionString = "";//my connection
// Set private property of Membership provider.
FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
connectionStringField.SetValue(this, connectionString);
}
}
}
Разница между моим CustomProfileProvider заключается в том, что я не могу использовать сам себя, потому что метод "create" находится в ProfileBase.И с ILSpy я видел синглтон, и мне интересно, не является ли это источником проблемы.Проблема в том, что я передаю только один раз в методе initialize.Я не могу в другой раз изменить источник данных.
Надеюсь, вы понимаете мой плохой английский и можете мне помочь.