ASP.NET 带有 OWIN 的 MVC 5 存储库模式

本文关键字:存储 模式 MVC NET 带有 OWIN ASP | 更新日期: 2023-09-27 18:34:08

在MVC 4中,我最终覆盖了控制器工厂,以允许我的ApplicationDbContext在实例化时注入到每个控制器中。我确信在我的整个请求中,我永远不会有两个对我的ApplicationDbContext的引用,这确保了我没有任何多线程问题。

现在 MVC 5 已经到来,使用 OWIN 实现存储库模式的正确方法是什么?我听说OWIN为每个请求创建一个新的UserManager/ApplicationDbContext。如果这是真的,那么我想在我的控制器/存储库中使用数据库上下文。是否可以将数据库上下文传递到控制器中?(HttpResponse.GetOwinContext.Environment["owin.DatabaseContext"]的台词??

这里似乎有一个半成品的问题没有问题的答案:OWIN DbContext 和我所有存储库的单个 DbContext。(这里还有一个:Owin 上下文为每个请求使用单个实例)任何指导都值得赞赏。

ASP.NET 带有 OWIN 的 MVC 5 存储库模式

是的,这是真的,您可以使用方法 CreatePerOwinContext 将上下文设置为使用类的相同实例,因此对于 UserManager/ApplicationDbContext,您可以在 Startup.ConfigureAuth 方法中将它们设置为如下所示:

// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

当你需要你的依赖关系时,你可以使用GetUserManager方法来检索应用程序用户管理器对象。

var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

此外,一些 Ioc 容器(如 Autofac)支持 OWIN 集成,您可以参考此网页了解更多详细信息。

希望这有帮助。