C# 使用IOC容器和IdentityFactory中间件

C# 使用IOC容器和IdentityFactory中间件,c#,asp.net-identity,C#,Asp.net Identity,我试图理解这里解释的UserManagerFactory中间件 我创建了这个类,我正在通过Startup配置方法调用它 public class CustomUserManagerProvider { public static CustomUserStore<CustomUser> CreateCustomUserStore() { return new CustomUserStore<CustomUser>(/*Need to inje

我试图理解这里解释的UserManagerFactory中间件

我创建了这个类,我正在通过Startup配置方法调用它

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>>());
    }
}
但是,我试图避免服务定位器(反)模式。这是我唯一的选择,这是正确的吗

我正在使用Ninject

我能不能在组合根目录的requestScope中创建一个UserManager并注入控制器,这不是一回事吗


在web应用程序中,CreatePerOwinContext与在RequestScope中创建相同吗?

是的,如果您愿意,可以用不同的方式将UserManager插入控制器,没有任何东西需要使用CreatePerOwinContext/IdentityFactoryMiddleware。

Trailmax提供了一个关于如何使用Unity for DI将Identity项目模板转换为一个模板的分步说明;他发现了几个陷阱,值得一读。i、 e.你不能完全删除你的所有app.CreatePeroWinContext for UserManager。您仍然需要一个app.CreatePerOwinContext(()=>DependencyResolver.Current.GetService());在Startup.auth.Using ILSpy中,我看到的对
OwinContext.Get()
的唯一调用是在
SecurityStampValidator
(通过调用
OwinContext.GetUserManager
)中。由于
SecurityStampValidator
仅与
CookieAuthenticationProvider
一起使用,因此如果您使用的WebApi没有cookie,则跳过调用
CreatePerOwinContext
应该是安全的。
public void Configuration(IAppBuilder app)
    {
        app.CreatePerOwinContext(CustomUserManagerProvider.CreateCustomUserStore);
        app.CreatePerOwinContext<IngramUserManager>(CustomUserManagerProvider.CreateCustomUserManager);
        ////....Other things
    }
public static CustomUserStore<CustomUser> CreateCustomUserStore()
    {
        var dependency = DependencyResolver.Current.GetService<ISomeDependency>();          
        return new CustomUserStore<CustomUser>(dependency);
    }