2014-02-10 55 views
2

我想知道如何處理依賴注入考慮以下體系結構。在多個項目的ASP.NET MVC體系結構中的依賴注入

我有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?還是有什麼我失蹤?

謝謝!

+1

StructureMap有一個很好的功能可以按照慣例進行綁定。你應該看看。如果你不喜歡它,那麼你可以將依賴關係解析轉移到外部類庫(在分層應用程序的基礎結構中),然後從UI層調用一些「初始化」方法。 – Cosmin

+0

相關:https://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven

回答

1

我在當前項目中遇到了同樣的問題,因爲我有一個UI項目的核心程序集(asp.net MVC,asp.net web api和可移植的asp.net mvc程序集),所以我決定將DI的所有配置放入我的Web.Core程序集中。沒有其他辦法來處理它。 現在你的情況下,如果你不需要它,你不需要參考MyProject.SomeOtherThingMyProject.UI,DI應用程序的最佳位置是MyProject.Business。你只需要在MyProject.UI註冊的配置,這是所有

2

我們創建了一個新的項目「綁定」,它引用的一切,有Ninject綁定。這樣,您的UI項目只需要知道業務層和綁定層,而不是SomeOtherThing層。