2017-10-16 3 views
0

단일성을 사용하여 가장 간단한 방법으로 종속성을 등록하는 방법이 있는지 묻고 싶습니다.레지스터 종속성 Unity

public class Module : IModule 
    { 
     IUnityContainer _container; 
     IRegionManager _regionManager; 

    public Module (IUnityContainer container, IRegionManager regionManager) 
    { 
     _container = container; 
     _regionManager = regionManager; 
    } 

    public void initialize() 
    { 
     IRegion region = _regionManager.Regions[RegionNames.ContentRegion]; 
     _container.RegisterType<"InterfaceHERE", "CLASSHERE">(); 
    } 

30-40 개의 클래스와 인터페이스가 있습니다. 중복 코드를 작성하고 싶지 않습니다. 가장 간단한 형태로 코드를 작성하는 방법이 있습니까? 모든 수업을 듣고 루프를 만들고 등록하는 것과 같은가?

감사합니다.

+0

: 당신은 구현을 검색하고 자동으로 아래를 등록이 패키지를 수 사용하면, 자세한 내용은 프로젝트 문서를 확인하십시오 public 생성자 및 Unity가있는 모든 유형은 이전에 등록하지 않고 찾을 수 있습니다. 바라건대 실제로 IoC를 사용하고 있기를 바랍니다. – Crowcoder

답변

1

Unity 3.0부터 규칙을 사용하여 컨테이너에 구현을 등록 할 수 있습니다. see the details here을 입력하십시오. 코드는 다음과 같습니다. 자동 등록 할 방법, 방법 (매핑 선택), 이름 및 수명 결정 방법을 지정해야합니다. 유니티 2.0을 사용하는 경우

using (var container = new UnityContainer()) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMapping.MatchingInterface, 
    WithName.Default, 
    WithLifetime.ContainerControlled); 
} 

는, 당신은 nuget UnityConfiguration를 참조 추가 패키지를 사용해야합니다. 당신이 다음에`해결()`호출 할 수 있습니다 대신 실제의 IoC의 서비스 로케이터 패턴을 사용하는 경우

public class FooRegistry : UnityRegistry 
{ 

    (...) 

    Scan(scan => 
    { 
      scan.AssembliesInBaseDirectory(); 
      scan.ForRegistries(); 
      scan.With<FirstInterfaceConvention>(); 
      scan.With<AddAllConvention>() 
       .TypesImplementing<IHaveManyImplementations>(); 
      scan.With<SetAllPropertiesConvention>().OfType<ILogger>(); 
      scan.ExcludeType<FooService>(); 
    }); 
} 
+0

나는 그것이 v3.5 이상이라고 생각한다. 나만 2.0에있어. –

+0

좋아, Unity 2.0을 커버하기 위해 나의 대답을 업데이트했다. 행운을 비네! 내 게시물이 도움이된다면 답을 표시하십시오. 다른 사람들에게 도움이 될 것입니다. –

+0

unity 구성을 설치 한 후에도 RegisterTypes 확장을 찾을 수 없습니다. : –

관련 문제