3

我正在使用 asp.net mvc 创建一个新应用程序,我正在使用 munq IOC 容器作为我的依赖注入..问题是我想创建一个用于依赖解析的新项目,我可以在其中注册 mvc 项目的所有控制器和基础设施项目的存储库..我必须在我的 mvc 应用程序中添加 Dependency Resolution 项目作为参考作为起点......但问题是为了在这个单独的应用程序中注册控制器,我需要参考mvc 在依赖解决项目本身中......但是这样的事情是不可能的,因为这会导致循环引用..

那么如何解决这个问题呢?或者管理依赖解决方案的最佳方法是什么?我不想最终在 Global.asax 中注册所有内容

4

2 回答 2

3

从 Munq.Codeplex.com 的源选项卡获取最新版本。这个版本有一个视图改进,是我最熟悉的版本,我写的。

为了防止注册的循环引用,创建一个类项目,其中包括对 Munq.Interfaces 的尊重以及您希望注册的接口和实现。

创建一个实现IMunqConfig 的类。它有一种方法void RegisterIn(IIocContainer container)。实现这个方法。

public class MyRegistration : IMuncConfig
{

    public void RegisterIn(IIocContainer container)
    {

        container.Register<IMyInterface>(c => new MyImplementation());

        //       OR

        container.Register<IMyInterface, MyImplementation>();

       // Repeat as required for each thing to register
    }
}

然后在 global.asax

protected void Application_Start()
{
    IocContainer = new Container();
    Munq.COnfigurationLoader.FindAndRegisterDependencies(container);

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}

这将在 bin 目录中搜索任何具有实现 IMunqConfig 的类的 dll,并在每个 dll 上执行 RegisterIn 方法。所以只需将注册 dll 放到 bin 目录中,注册就会自动发生:)

马修

于 2010-10-20T17:54:26.440 回答
0

我想为依赖解析创建一个新项目,我可以在其中注册mvc 项目的所有控制器和基础设施项目的存储库。

我不会在与您的存储库相同的项目中注册 MVC 控制器。MVC 应用程序应该“拥有”它的组合,包括注册它的内部依赖。

理想情况下,您的基础设施项目的注册应该在项目中,特别是如果您不打算将其提供给使用不同 DI 容器的其他项目。如果该项目需要保持与 DI 无关,那么将 DI 注册分离到一个单独的项目中可能是有意义的。

但我绝对不会让服务(如您的存储库)负责注册其消费者的内部依赖项(如您的 MVC 应用程序)。

于 2016-08-05T13:48:35.707 回答