gpt4 book ai didi

asp.net-mvc - 依赖注入(inject)和 ASP.Net Membership Providers

转载 作者:行者123 更新时间:2023-12-03 08:25:22 25 4
gpt4 key购买 nike

我正在为 ASP.Net MVC 网站创建自定义成员(member)提供程序。提供程序被创建为一个单独的类,作为更大库的一部分。后端数据存储需要灵活,因为它可以是 Xml 文件或 SQL 数据库。我最初的想法是为数据存储创建一个接口(interface),并使用依赖注入(inject)将其注入(inject)提供程序。

最终结果是开发人员可以继承数据存储接口(interface)并提供更新数据所需的方法,然后自定义成员资格提供程序将使用这些方法。

但是,由于我自己缺乏技能,我无法弄清楚在将类(class)添加到网站时如何将类(class)注入(inject)成员(member)提供者?需要做什么才能将数据存储链接到提供者?在网站中启用此功能的最简单方法是什么?

最佳答案

如果您通过 Web.config 文件中的 元素配置自定义成员资格提供程序,那么我可以看到您在依赖注入(inject)时会遇到的问题。

提供程序由框架构建和管理,您没有机会拦截该构建以提供额外的依赖注入(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com