2014-02-10 4 views
2

다음 아키텍처를 고려하여 종속성 주입과 관련하여 궁금한 점이 있습니다. 여러 프로젝트가있는 ASP.NET MVC 아키텍처의 종속성 삽입

는 I 3 개 프로젝트 StructureMap가 MyProject.UI에 의존성 주입에 사용되는
MyProject.Business
MyProject.SomeOtherThing

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; 
     } 
    } 
} 

는 비즈니스 계층 클래스를 소비하고 SomeClassSomeService라고 사용하는 서비스를 제공합니다.

DI 등록이 작동하려면 MyProject.UIMyProject.SomeOtherThing에 대한 참조가 있어야합니다.

나는 이것을 피하고 싶습니다. 이상적으로 UI 프로젝트는 MyProject.Business에 대한 참조 만 가질 수 있습니다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까? DI 구성을 MyProject.Business으로 이동합니까? 아니면 제가 놓친 다른 것이 있습니까?

감사합니다.

+1

StructureMap에는 규칙에 따라 바인딩하는 유용한 기능이 있습니다. 당신은 그것을 조사해야합니다. 만약 당신이 그것을 좋아하지 않는다면, 당신은 계층 적 애플리케이션의 하부 구조에서 외부 클래스 라이브러리로 의존성 분석을 옮기고 UI 레이어에서 "Initialize"메소드를 호출 할 수 있습니다. – 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 웹 API 및 asp.net mvc 별도의 어셈블리에서 휴대용 Ares)에 대한 핵심 어셈블리를 같이 내 현재 프로젝트에서 동일한 문제가, 그래서 내 Web.Core 어셈블리에 DI의 모든 구성을 넣으십시오. 그것을 처리 할 다른 방법이 없습니다. 필요없는 경우 MyProject.SomeOtherThingMyProject.UI으로 참조 할 필요가없는 경우 응용 프로그램의 DI 구성에 가장 적합한 위치는 MyProject.Business입니다. MyProject.UI에 구성을 등록하면됩니다. 그게 전부예요

2

모든 것을 참조하고 Ninject 바인딩을 가진 "Binding"이라는 새 프로젝트를 만들었습니다. 이렇게하면 UI 프로젝트는 SomeOtherThing 레이어가 아니라 비즈니스 레이어와 바인딩 레이어에 대해서만 알아야합니다.

관련 문제