gpt4 book ai didi

entity-framework - ASP.net 身份、IoC 和共享 DbContext

转载 作者:行者123 更新时间:2023-12-04 08:29:44 27 4
gpt4 key购买 nike

有没有人成功地将 IoC 与 OWIN ASP.NET 标识附加到与 WebApi(或 MVC)应用程序共享相同的 DbContext 上?

如果 ASP.Net 身份加载用户,我希望它加载到与应用程序其余部分相同的 dbcontext 中。

(使用 AutoFac 作为 IoC - 但不介意其他容器的示例)

编辑 :
2014 年 1 月 6 日:更具体一点,当 ASP.Net 身份尝试使用 DbContext 时,它必须是相同的 DbContext 实例 作为应用程序的其余部分。否则它将创建相同 DbContext 的两个实例。我已经在使用 .PerHttpApiRequest()延期。

我发现的问题是,在设置 OWIN 类时,我找不到以下方法:
1) 将容器附加到 OWIN 管道;
2)告诉 OWIN 使用该容器解析它需要的类,以便它可以共享相同的范围(即 OAUthServerOptions 或可能包含其他依赖项的任何其他类)

话虽如此,您如何设置解决上述两点的 ASP.Net 身份?

最佳答案

编辑:添加根据评论实例化 OWIN 管道。

由于 ASP.NET Identity 使用的 IdentityDbContext 继承自 DbContext,因此您可以像这样简单地创建自己的继承自 IdentityDbContext 的实现

public class ApplicationContext : IdentityDbContext<ApplicationUser>
{
//additional DbSets
public DbSet<OtherEntity> OtherEntities { get; set; }
}

public class ApplicationUser : IdentityUser
{
//any custom properties you want for your user.
}

public class OtherEntity
{
[Key]
public int Id { get; set; }
}

现在就使用 IoC 而言,从统一的角度来看,我像这样注册 UserStore 的实例
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new InjectionConstructor(typeof(ApplicationContext)));
}

然后围绕用户管理器创建一个包装器
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
{
}
}

并在我需要用户管理器的任何地方注入(inject)。

至于 OWIN 管道,您需要通过容器实例化 OAuthAuthorizationProvider,如下所示。
container.RegisterType<IOAuthAuthorizationServerProvider, ApplicationOAuthProvider>(new InjectionConstructor("self", typeof(ApplicationUserManager)));

然后例如在 WebApi 中,您只需在启动时从容器中获取实例。
static Startup()
{
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = (IOAuthAuthorizationServerProvider)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IOAuthAuthorizationServerProvider)),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(5),
AllowInsecureHttp = true,
RefreshTokenProvider = new SimpleRefreshTokenProvider()
};
}

关于entity-framework - ASP.net 身份、IoC 和共享 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com