我正在为 ASP.Net MVC 网站创建自定义成员(member)提供程序。提供程序被创建为一个单独的类,作为更大库的一部分。后端数据存储需要灵活,因为它可以是 Xml 文件或 SQL 数据库。我最初的想法是为数据存储创建一个接口(interface),并使用依赖注入(inject)将其注入(inject)提供程序。
最终结果是开发人员可以继承数据存储接口(interface)并提供更新数据所需的方法,然后自定义成员资格提供程序将使用这些方法。
但是,由于我自己缺乏技能,我无法弄清楚在将类(class)添加到网站时如何将类(class)注入(inject)成员(member)提供者?需要做什么才能将数据存储链接到提供者?在网站中启用此功能的最简单方法是什么?
最佳答案
如果您通过 Web.config 文件中的
提供程序由框架构建和管理,您没有机会拦截该构建以提供额外的依赖注入(inject) IDataStore
界面。
如果我的假设是正确的,那么您可以做的是覆盖 Initialize()
自定义提供程序中的方法,并在那里进行依赖注入(inject)。您可以在提供程序配置中使用自定义名称/值设置,该设置指向实现 IDataStore
的类型。 ,它作为字典的一部分传递给 Initialize()
方法。
然后,激活数据存储类型的实例并将其设置为适当的属性:public class MyMembershipProvider : MembershipProvider
{
public IDataStore DataStore
{
get;
set;
}
public override Initialize(string name, NameValueCollection config)
{
var dataStoreType = config["dataStoreProvider"];
if (!String.IsNullOrEmpty(dataStoreType))
{
var type = Type.GetType(dataStoreType);
DataStore = (IDataStore) Activator.CreateInstance(type);
}
}
}
Initialize()
将在框架构造您的提供者的实例后被框架调用,因此这是执行任何额外设置工作的理想场所。
对于测试场景,您只需在提供程序实例本身上设置数据存储属性,因为您将直接在测试中构建它。
关于asp.net-mvc - 依赖注入(inject)和 ASP.Net Membership Providers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1551503/