【问题标题】:How to set up Unity container in MVC application如何在 MVC 应用程序中设置 Unity 容器
【发布时间】:2011-08-31 18:02:47
【问题描述】:

我无法在 ASP.NET MVC3 应用程序中使用统一容器。

我有几个带有接口及其实现的项目。所有具体类型绑定的接口都在应用启动方法中进行。

我对这种方法有几个问题:

1) 如何处理 MVC 应用程序不直接需要但它使用的类(Repository 使用 ContextManager 检索上下文实例)的类型的注册。如果这个类位于 mvc 应用程序不使用的程序集中,我将不得不添加对它的引用。

2) 如何共享配置好的容器?我应该用静态类创建单独的程序集,它将由 mvc 应用程序容器创建吗?

3) 什么样的统一容器使用可能会带来跨线程问题?如何注册单例,以便它们仅在此线程(网络服务器调用)等中可用。

【问题讨论】:

    标签: c# asp.net-mvc unity-container ioc-container


    【解决方案1】:
    1. 您应该将所有程序集显式引用到您的 ASP.NET MVC 应用程序。它是onion architecture 中的最外层,允许了解内层。无论如何,所有程序集都必须位于 bin 文件夹中,以便 ASP.NET MVC 应用程序以一种或另一种方式了解它们。只需将 DI 框架配置外部化到 ASP.NET MVC 应用程序中的一个位置即可。
    2. 见 1。
    3. 在 ASP.NET 中按线程存储可能很危险。 Per HTTP Context 更好。

    【讨论】:

    • 那么如何共享配置好的容器呢?例如,我想解析其中一个程序集内的对象实例。使用静态类保存容器的方法可以吗?
    • @Dmitry Kushnier,您只需将此程序集引用到您的 ASP.NET MVC 应用程序中,然后配置容器:blog.janjonas.net/2011-03-12/…
    • 好吧,我刚刚意识到整个实例解析将由Web服务器调用启动,所有需要的实例都将从上到下解析。我问这个是因为我想使用类似的东西: static class { static method { return ServiceLocator.Resolve(); }}
    • @Dmitry Kushnier,我认为服务定位器是一种反模式,并且更喜欢依赖注入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多