【问题标题】:How to injection dependencies into custom Identity UserStore implementation?如何将依赖项注入自定义 Identity UserStore 实现?
【发布时间】:2015-06-25 02:22:33
【问题描述】:

我有一个使用 ASP.NET Identity 进行身份验证/授权的 ASP.NET Web API 项目。我已经插入了我自己的自定义身份实现,即我自己的 UserStore 来与 Azure 表对话,并删除了 EF/SQL Server 的东西。但是,我看到的大多数文档都建议在 Startup.Auth.cs 类中创建 UserManagerFactory 的实例,如下所示:

public static Func<UserManager<CustomIdentityModel>> UserManagerFactory { get; set; }
UserManagerFactory = () => new UserManager<CustomIdentityModel>(new CustomUserStore<CustomIdentityModel>());

我的 CustomUserStore 依赖于另一个项目中的存储库,我依赖注入到构造函数中。

private readonly IRepository _repo;

public CustomUserStore(IRepository repo)
{
    _repo = repo;
}

但是,在 Startup.Auth.cs 中创建“new CustomUserStore()”是一种反模式,无法解决依赖关系。创建 UserManager 时解决这种依赖关系的正确方法是什么?我想要么不必“新建” UserManagerFactory,要么以某种方式解决内联依赖:

new UserManager<CustomUserModel>(container.Resolve<IRepository>());

那么问题就变成了,如何获取单个IOC容器实例……

【问题讨论】:

    标签: c# asp.net-web-api dependency-injection asp.net-identity


    【解决方案1】:

    在您的 global.asax 或 owin 启动类中创建一个静态字段来保存 ioc 容器的引用,在您的容器引导设置中设置静态字段值。

    之后,您可以从某个地方访问 ioc 容器,在您的 Startup.Auth.cs 类中,您可以读取 ioc 静态字段容器并初始化内联 UserStore。

    欧文类:

    public class Startup {
    
       public static IUnityContainer Container; //Static field for hold ioc container reference.
    
    
        public void Configuration(IAppBuilder app)
                {
                    //Code Omitted for brevity
    
                    Container = YourIoCContainerReference:
                }
        }
    }
    

    所以你可以进行内联初始化:

    var repository = Startup.Container.Resolve<IRepository>();
    

    并获得你的依赖。

    【讨论】:

    • 这正是我最终要做的。我一直在尝试在哪里创建这个静态容器以在其他地方使用,我在全局范围内创建了我的静态 IWindsorContainer 并像您上面所做的那样内联解析。通常,我只会在我的测试中解决内联问题,但似乎微软的 ASP.NET 身份将迫使我采取行动。
    • 这是目前唯一的办法。在 ASP.NET MVC 6 中,这个问题消失了,因为框架包括从头开始的 DI 支持
    • Container = YourIoCContainerReference:这里到底要替换什么?
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2022-07-07
    相关资源
    最近更新 更多