C# 使用IOC容器和IdentityFactory中间件
我试图理解这里解释的UserManagerFactory中间件 我创建了这个类,我正在通过Startup配置方法调用它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
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);
}