【问题标题】:ASP.NET MVC 5 Repository pattern with OWIN [closed]带有 OWIN 的 ASP.NET MVC 5 存储库模式 [关闭]
【发布时间】:2015-02-12 13:02:59
【问题描述】:

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

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

这里似乎有一个未完成的问题没有答案:OWIN DbContext and a single DbContext for all of my Repositories。 (这里也有一个:Owin Context to use a single instance per request)感谢任何指导。

【问题讨论】:

    标签: c# asp.net entity-framework asp.net-mvc-5 owin


    【解决方案1】:

    是的,这是真的,您可以使用 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 方法来检索 ApplicationUserManager 对象。所以是这样的:

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

    另外,一些 Ioc 容器如 Autofac 支持 OWIN 集成,您可以参考this 网页了解更多详情。

    希望这会有所帮助。

    【讨论】:

    • Omar,我在创建构造函数时是否可以获得这个 ApplicationDbContext?这样我就可以获取这个上下文,创建适当的存储库,并将存储库传递给控制器​​?
    • 好吧,如果您有 OWIN 上下文,那么您可以调用 context.Get() 例如,在您使用 app.CreatePerOwinContext 在启动中注册该请求后,获取当前请求的 ApplicationDbContext,你可以看看我的文章 codeproject.com/Articles/742532/… 并检查我在初始化 ApplicationUserManager 类时如何调用 context.Get()。
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2023-03-27
    • 2023-03-23
    • 1970-01-01
    • 2017-10-31
    • 2011-04-19
    相关资源
    最近更新 更多