具有多个项目的ASP.NET MVC体系结构中的依赖注入

时间:2014-02-10 18:04:58

标签: c# asp.net-mvc dependency-injection structuremap

考虑到以下架构,我想知道如何处理依赖注入。

我有3个项目

MyProject.UI
MyProject.Business
MyProject.SomeOtherThing

StructureMap用于MyProject.UI中的依赖注入。

public static class Bootstrapper
{
    public static void Run()
    {
        ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());

        ObjectFactory.Initialize(x =>
        {
                x.For<ISomeClass>().Use<SomeClass>();
        }
    }
}

我的问题是,MyProject.SomeOtherThing中有一些由MyProject.Business使用的类。这些类设置为使用DI。

namespace MyProject.SomeProject
{
    public SomeClass
    {
        public ISomeDependency SomeDependency { get; set; }

        public SomeClass (ISomeDependency someDependency)
        {
            SomeDependency = someDependency;
        }
    }
}

业务层使用该类并公开使用SomeClass SomeService的服务。

要使DI注册生效,MyProject.UI必须引用MyProject.SomeOtherThing

我想避免这种情况。理想情况下,UI项目只能引用MyProject.Business

处理这种情况的最佳方法是什么?是否将DI配置移到MyProject.Business?或者还有其他我想念的东西?

谢谢!

2 个答案:

答案 0 :(得分:2)

我们创建了一个新项目“Binding”,它引用了所有内容并具有Ninject绑定。这样,您的UI项目只需要知道Business层和Binding层,而不是SomeOtherThing层。

答案 1 :(得分:1)

我在当前项目中遇到了同样的问题,因为我有一个用于UI项目的核心程序集(asp.net MVC,asp.net web api和asp.net mvc在单独的程序集中的便携式数据集),所以我决定把我的所有配置都放在我的Web.Core程序集中。没有其他办法可以处理它。 现在您的情况下,如果您不需要MyProject.SomeOtherThing,则无需引用MyProject.UI,应用程序的DI配置的最佳位置是MyProject.Business。你只需要在MyProject.UI中注册配置,这就是全部