依赖性解决作为一个单独的项目..如何?

时间:2010-10-19 07:20:55

标签: dependency-injection ioc-container circular-dependency circular-reference

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

那么如何解决这个问题呢?或者管理依赖项解析的最佳方法是什么? 我不想最终注册Global.asax

中的所有内容

2 个答案:

答案 0 :(得分:3)

从Munq.Codeplex.com的源标签中获取最新版本。这个版本有一个视图改进,它是我最熟悉的版本,我写了它。

要防止循环引用进行注册,请创建一个类项目,其中包含对Munq.Interfaces的敬意以及您希望注册的接口和实现。

创建一个实现IMunqConfig的类。它有一个方法 void RegisterIn(IIocContainer容器)。实施此方法。

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目录并自动注册:)

马修

答案 1 :(得分:0)

  

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

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

理想情况下,您的基础架构项目的注册应位于 项目中,特别是如果您不打算将其他项目用于使用不同DI容器的其他项目。如果该项目需要保持与DI无关,那么将DI注册分成单独的项目可能是有意义的。

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