You will pass an explicit provider to your code, and not directly depend on Memebership (which simply wraps the flag marked as default in config). There is no need to change them during operation, consider how this will affect thread safety.
Therefore, instead of saying Membership.GetAllUsers(); , you would do something like (I don't have a compiler):
public UserSerivce : IUserService { private MembershipProvider provider; public UserService(MembershipProvider provider) { this.provider = provider; } public IEnumerable<MembershipUser> GetUsers() { return provider.GetAllUsers(); } public void DoSomethingElseUseful() { ... } }
And then use it for a specific provider:
var service = new UserService(Membership.Providers["mySqlMembershipProvider"]); var users = service.GetUsers();
Or, if you use special AD code:
var service = new UserService(Membership.Providers["myADMembershipProvider"]); var users = service.GetUsers();
Using DI in this way also helps keep code in check.
source share