나는이 Caliburn 마이크로에 적용하는 방법을 잘 모르겠어요 FileTreeNavigation : INavigationService<FileTreeView>
같은 유형을 생성하여 (예를 들어 종속 뷰를 찾기위한 IDE 지원을받을 수 그러나 문제는 패턴에 관한 것이므로 여기에서 StrucureMap으로이 문제를 해결하는 방법을 설명합니다 : Ctor<>
메서드를 사용하여 생성자 매개 변수 해결을위한 구체적인 유형을 지정할 수있는 방법을 설명하겠습니다.
또한 특수 인터페이스 너의 FileTreeNavigation
예제)는 훌륭하지만, 어떤 이유로 든 적절한 것이 아니라면 계속 읽어보십시오.
의 우리가 있다고 가정하자 INavigationService
인터페이스와 두 개의 서로 다른 구현 :
public interface INavigationService { }
public class NavigationServiceA : INavigationService { }
public class NavigationServiceB : INavigationService { }
다음, 우리는 두 개의 서로 다른 서비스 클래스, 모두 INavigationService
인터페이스에 따라이 : 마지막으로
public class ServiceA
{
private readonly INavigationService _navigationService;
public ServiceA(INavigationService navigationService)
{
_navigationService = navigationService;
}
}
public class ServiceB
{
private readonly INavigationService _navigationService;
public ServiceB(INavigationService navigationService)
{
_navigationService = navigationService;
}
}
을, 우리 IoC 컨테이너를 사용하여 해결할 클래스가 있습니다. 이 클래스는 모두 ServiceA
및 ServiceB
에 따라 다음과 같이 정의된다 :
public class SomeClassToResolve
{
private readonly ServiceA _serviceA;
private readonly ServiceB _serviceB;
public SomeClassToResolve(ServiceA serviceA, ServiceB serviceB)
{
_serviceA = serviceA;
_serviceB = serviceB;
}
}
StructureMap 생성자 매개 변수를 해결하기 위해 사용하는 유형을 지정하는 가능성을 제공합니다. 지금
ForConcreteType<ServiceA>().Configure.Ctor<INavigationService>().Is<NavigationServiceA>();
ForConcreteType<ServiceB>().Configure.Ctor<INavigationService>().Is<NavigationServiceB>();
내가 container.GetInstance<SomeClassToResolve>();
를 호출 할 때 ServiceA
올바르게 구성 ServiceB
이 (NavigationServiceA
및 NavigationServiceB
, 각각을 가진)의 인스턴스가 SomeClassToResolve
의 인스턴스를 만들 수 있습니다 : 등록이 보이는 방법이다.
이 방법을 사용하면 훨씬 간단합니다. Conditional Construction의 가능성도 있습니다 만, 꽤 복잡해 질 수 있다고 생각합니다.
PS : 나는 StructureMap (해당 여기가 InjectionConstructor
를 불렀다)와 함께하고 있어요 것과 비슷한 것 같다 내가 this approach 우연히 "caliburn 마이크로 생성자" 검색.
어떤 DI 라이브러리를 사용하고 있습니까? – GolfWolf
@ w0lf : 컨테이너는 Caliburn.Micro (http://caliburnmicro.codeplex.com/SourceControl/changeset/view/3cc9a20b8554#src%2fCaliburn.Micro.WP71.Extensions%2fSimpleContainer.cs)의 일부입니다. – skarmats