2010-01-05 2 views
3

structmap을 사용하여 컨트롤러에 서비스를 등록하고 있으며 저장소에도 서비스를 등록해야합니다. 2 가지 프로젝트가 있고 정확히 동일한 IOC 등록이 필요하기 때문에 어떻게 할 것인가. 사실 저는 그것을 프레젠테이션 레이어에 사용하고 컨트롤러에 서비스를 주입하고 있습니다. 동일한 IOC 컨테이너를 사용하여 두 프로젝트에 모두 주입하는 좋은 방법을 알아야합니다.서비스 계층과 서비스의 저장소를 preentation 계층에 등록하려면

+0

질문이 명확하지 않습니다 : 여러 라이브러리의 종속성을 등록해야합니까? 아니면 두 개의 다른 응용 프로그램에 대해 동일한 종속성을 연결해야합니까? –

답변

5

IOC 컨테이너와 모든 공유 서비스 구현을 다른 두 프로젝트에서 참조하는 세 번째 프로젝트 (클래스 라이브러리)에 넣습니다.

+0

그건 나에게도 명백한 해답 이었지만 처음에는 잘 알지 못했다. 좋은 프로젝트 였다면 다른 프로젝트 (UI 및 서비스)에서 IOC를 사용해야한다. – diego

+0

그리고 답에 감사드립니다! – diego

+0

문제 없습니다. 예, 나에게 좋은 연습처럼 들립니다! –

0

저는 자신의 구성을 처리 할 수 ​​있도록 각 프로젝트에 대해 StructureMap 레지스트리를 유지하는 경향이 있습니다. 내 메인 프로젝트는 각각의 의존성에 대한 참조를 추가한다. 내 메인에는 보통 컨테이너를 만들고 구성하는 부트 스트 래퍼 클래스가 있습니다. (I 가능한 경우 정적 ObjectFactory를 피하기.)

public class ApplicationBootstraper 
{ 
    public IContainer Container { get; set; } 

    public ApplicationBootstraper() 
    { 
     Container = new Container(x=> 
     { 
      x.AddRegistry<SettingsRegistry>(); 
      x.AddRegistry<ProjectRegistry>(); 

      //more registries go here or application specific configuration. 
     }); 
    } 
} 

프로젝트가 StructureMap 인식 다른 프로젝트에 대한 종속성을 갖는 대하여. 버전 2.5.4에는 현재 레지스트리에 다른 레지스트리를 포함 할 수있는 기능이 추가되었습니다. 이 도움이

public class ProjectRegistry : Registry 
{ 
    public ProjectRegistry() 
    { 
     IncludeRegistry<CommonsRegistry>(); 

     Scan(scan => 
     { 
      scan.TheCallingAssembly(); 
      scan.WithDefaultConventions(); 
     }); 
    } 
} 

희망 : 예를 들어

나는 내가 다음과 같은 작업을 수행 할 수 I에 대한 종속성을 취할 필요 "일반적인"프로젝트가 있습니다.

관련 문제