Dependency injection 依赖项解析作为一个单独的项目..如何?

Dependency injection 依赖项解析作为一个单独的项目..如何?,dependency-injection,ioc-container,circular-dependency,circular-reference,Dependency Injection,Ioc Container,Circular Dependency,Circular Reference,我正在使用asp.net mvc创建一个新的应用程序,我正在使用munq IOC容器作为依赖项注入。问题是我想创建一个新的依赖项解析项目,在那里我可以注册mvc项目的所有控制器和基础设施项目的存储库。我必须在我的mvc应用程序中添加依赖项解析项目作为参考,因为这是起点。。。但问题是为了在这个单独的应用程序中注册控制器,我需要在依赖项解析项目本身中有mvc的引用…但是这样的事情是不可能的,因为这会导致循环引用 那么如何解决这个问题呢?或者,管理依赖项解析的最佳方法是什么? 我不想在Global.a

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

那么如何解决这个问题呢?或者,管理依赖项解析的最佳方法是什么?
我不想在Global.asax中注册所有内容。请从Munq.Codeplex.com的source选项卡获取最新版本。这个版本有一个视图改进,它是我最熟悉的版本,是我写的

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

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}
为了防止注册的循环引用,请创建一个类项目,其中包括对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
    }
}
这将在bin目录中搜索具有实现IMunqConfig的类的所有DLL,并在每个DLL上执行RegisterIn方法。因此,只需将注册DLL放入bin目录,注册就会自动进行:)

马修

我想创建一个新的项目来解决依赖关系,我可以 注册mvc项目的所有控制器和 基础设施项目

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

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


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

为什么不在Global.asax(表示您的HttpApplication对象)中注册?随着控制器和其他类列表的增加,维护起来太繁琐了..一个单独的项目确保了更松散的耦合Hi,很抱歉回复得太晚了。。。我有其他的优先事项要完成,所以我没有时间阅读你的答案。我会很快完成这项工作,并回复更新。谢谢你的回答