2014-02-19 2 views
2

외부 조건에 따라 런타임시 해결할 인스턴스의 이름을 빌드해야합니다.Unity가 인스턴스를 어떻게 해결하는지 사용자 정의 할 수 있습니까?

유니티에 사용할 수있는 확장 점이 있습니까? 아니면 공장을 사용해야합니까? 예를 들어

:

container.RegisterType<IStrategy, FooStrategy>("FooStrategy"); 
container.RegisterType<IStrategy, BarStrategy>("BarStrategy"); 

var foo = container.Resolve<IStrategy>(); // would like to extend here to select the correct type to resolve. 
Assert.IsTrue(foo.GetType() == typeof (FooStrategy)); 
+0

결정을 내리는 동안 어떤 정보가 있습니까? 컨테이너는 단지 당신이 필요로하는 것을 추측 할 수 없습니다. – Steven

+0

@Steven, 이것이 내가 그것을 확장해야하는 이유이며, IStrategy 유형을 해결하는 방법에 대한 논리를 추가해야 할 것입니다. – shenku

답변

0

그것은 당신이 어떤 예를 들어 해결하기 위해 운전 데이터로 사용할 것을 완전히 분명하지 않다 - 스티븐 말했듯이, 유니티는 ..

그것을 추측 할 수

논리를 사용하여 이름으로 해결할 수 있습니다 (MSDN에서).

// Create container and register types 
IUnityContainer myContainer = new UnityContainer(); 
myContainer.RegisterType<IMyService, DataService>("Data"); 
myContainer.RegisterType<IMyService, LoggingService>("Logging"); 

// Retrieve an instance of each type 
IMyService myDataService = myContainer.Resolve<IMyService>("Data"); 
IMyService myLoggingService = myContainer.Resolve<IMyService>("Logging"); 

논리가 복잡한 경우 사용자 지정 해결 프로그램을 사용할 수도 있습니다. 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/ee250036(v=bts.10).aspx

관련 문제