使用IOC容器和IdentityFactory中间件

本文关键字:IdentityFactory 中间件 IOC 使用 | 更新日期: 2023-09-27 17:49:39

我试图理解这里为usermanager的每个请求生命周期管理解释的UserManagerFactory中间件。

我创建了这个类,我从启动配置方法中调用

public class CustomUserManagerProvider
{
    public static CustomUserStore<CustomUser> CreateCustomUserStore()
    {
        return new CustomUserStore<CustomUser>(/*Need to inject dependencies here*/);
    }
    public static CustomUserManager CreateCustomUserManager(IdentityFactoryOptions<CustomUserManager> options,
        IOwinContext context)
    {
        return new CustomUserManager(context.Get<CustomUserStore<CustomUser>>());
    }
}

和启动配置

public void Configuration(IAppBuilder app)
    {
        app.CreatePerOwinContext(CustomUserManagerProvider.CreateCustomUserStore);
        app.CreatePerOwinContext<IngramUserManager>(CustomUserManagerProvider.CreateCustomUserManager);
        ////....Other things
    }

现在,我的CustomUserStore有一些依赖,我想注入到构造函数中。

IOC容器的组合根知道如何解析这些依赖关系。

我如何使CustomUserManagerProvider DI容器意识到(如果这有意义)…

public static CustomUserStore<CustomUser> CreateCustomUserStore()
    {
        var dependency = DependencyResolver.Current.GetService<ISomeDependency>();          
        return new CustomUserStore<CustomUser>(dependency);
    }

但是,我试图避免服务定位器(反)模式。这是我唯一的选择吗,这对吗?

我正在使用Ninject。

我不能只是创建一个UserManager在requestScope的组合根和注入到控制器,这不是一样的事情吗?

在web应用程序中,CreatePerOwinContext是否与创建InRequestScope相同?

使用IOC容器和IdentityFactory中间件

是的,如果你喜欢,你可以用不同的方式注入UserManager到你的控制器中,没有什么需要使用CreatePerOwinContext/IdentityFactoryMiddleware