Вы бы передавали явный провайдер в свой код, вместо того, чтобы напрямую брать зависимость от Memebership (которая просто включает в себя тот, который помечен в конфигурации по умолчанию). Нет необходимости менять их во время выполнения, подумайте, как это повлияет на безопасность потока.
Так что вместо того, чтобы говорить Membership.GetAllUsers();
, вы бы сделали что-то вроде (у меня нет компилятора под рукой):
public UserSerivce : IUserService
{
private MembershipProvider provider;
public UserService(MembershipProvider provider)
{
this.provider = provider;
}
public IEnumerable<MembershipUser> GetUsers()
{
return provider.GetAllUsers();
}
public void DoSomethingElseUseful()
{
...
}
}
А затем использовать его для определенного поставщика:
var service = new UserService(Membership.Providers["mySqlMembershipProvider"]);
var users = service.GetUsers();
Или, если используется специальный код AD:
var service = new UserService(Membership.Providers["myADMembershipProvider"]);
var users = service.GetUsers();
Использование DI таким способом также помогает тестировать код.