2011-05-16 3 views
0

다음과 같은 구조 맵을 구성하려고합니다.하지만 꽤 괜찮은 것처럼 보일 수 있습니다.구조 맵 구성에 대한 도움말

ObjectFactory.Initialize(x => { 

    x.For<TunaRepository>() 
     .Use(new TunaRepository(serviceEndpoint)) 
     .Named("Tuna"); 

    x.For<CodRepository>() 
     .Use(new CodRepository(serviceEndpoint)) 
     .Named("Cod"); 

    x.For<HaddockRepository>() 
     .Use(new HaddockRepository(serviceEndpoint)) 
     .Named("Haddock"); 

    x.For<IFishRepository>().AddInstances(y => 
             { 
              y.OfConcreteType<TunaRepository>(). 
              // Somehow add all instances here??? 

             }); 

    x.For<TunaController>().Use<TunaController>() 
     .Ctor<IFishRepository>("repo").Is<TunaRepository>(); // This Is should use the instance registered above 

    x.For<CodController>().Use<CodController>() 
     .Ctor<IFishRepository>("repo").??? 

    x.For<HaddockController>().Use<HaddockController>() 
     .Ctor<IFishRepository>("repo").??? 

}); 

할 수 있기를 원하는 코드 :

var instances = ObjectFactory.GetAllInstances<IFishRepository>(); 

var instance = ObjectFactory.GetNamedInstance<IFishRepository>("Cod"); 

또한 IFichRepository를 내 컨트롤러의 인수로 사용하십시오.

public TunaController(IFishRepository repo ... 

그래서 내 질문에 내 ObjectFactory 구성하는 가장 좋은 방법은 무엇입니까?

답변

0

당신이 추가 방법을 사용하는 기본 인스턴스 안 명명 된 인스턴스 등록 : 당신이 TunaRepository이 싱글은 당신이 람다를 사용하여 등록해야되고 싶어하지 않는

x.For<IFishRepository>() 
    .Add(() => new TunaRepository(serviceEndpoint)) 
    .Named("Tuna"); 

은 또한을 준수합니다. 람다는 인스턴스가 요청 될 때 평가되고 예제에서는 새 인스턴스를 반환합니다. serviceEndpoint를주의 깊게 살펴보고 모든 저장소에 대해 단일 인스턴스를 원한다면 확인하십시오. 일반적으로 나는 <>()을 사용하여 모든 의존성을 철자하는 경향이 있습니다. "new"를 사용하는 대신 가능하면 구조 맵에서 <>()을 사용하십시오. 이렇게하면 등록을 변경하지 않고도 새 매개 변수를 추가 할 수 있으므로 아키텍처가 훨씬 더 유연 해집니다. 명명 된 인스턴스를 지정

는이 구문을 사용할 수있는 생성자에서 사용되는 : 중복 코드를 제거 나는 순서에 IRegistrationConvention을 사용, 같은 패턴을 따르고 있습니다 모든 등록 이후

x.For<TunaController>().Use<TunaController>(). 
    Ctor<IFishRepository>("repo"). 
    Is(i => i.TheInstanceNamed("Tuna")); 

및 새로운 저장소를 추가하는 노력을 최소화합니다.

+0

정보 주셔서 감사합니다. (lambda 인수에는 하나의 입력 인수가 있지만 :)) – Dve

관련 문제