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

标签 asp.net-mvc dependency-injection membership-provider data-storage

我正在为 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/

相关文章:

javascript - 无法解析 strip Angular 依赖注入(inject)

asp.net-mvc-4 - 代码优先成员(member)提供商

c# - 使用 dbcontext 的正确方法(全局或作为参数传递?)

java - 现场注入(inject) Gin

c# - MVC 3 - 如何从操作方法返回显示模板?

c# - Ninject 功能 (WhenInjectedInto) 等同于 Windsor

asp.net-mvc - 如何在 ASP.NET MVC 中实现基于 ID 的用户系统(成员资格、授权等)?

asp.net-membership - 为什么 ValidateUser 不返回更多?

asp.net-mvc - 如何从自定义模型绑定(bind)器中删除魔术字符串?

asp.net - 如何在 Kendo DatePicker 扩展中添加额外的 htmlattributes