Unity에서 등록을 설정하려고하는데 필요한 정보를 얻는데 어려움이 있습니다.인스턴스를 요청하는 클래스를 기반으로하는 Unity 해결
나는 다음과 같은 정의를 상상해 다음과 같이
public interface ISomeInterface { ... }
public interface ISomeDependency { ... }
public class DependencyA : ISomeDependency { ... }
public class DependencyB : ISomeDependency { ... }
public class SomeClassA : ISomeInterface
{
public SomeClassA(ISomeDependency dep){ ... }
}
public class SomeClassB : ISomeInterface
{
public SomeClassB(ISomeDependency dep){ ... }
}
내가 다음 유니티로 등록 :
Container.RegisterType<ISomeDependency, DependencyA>("DependencyA");
Container.RegisterType<ISomeDependency, DependencyB>("DependencyB");
Container.RegisterType<ISomeInterface, SomeClassA>("ClassA");
Container.RegisterType<ISomeInterface, SomeClassB>("ClassB");
나는 또한 ISomeInterface
기반으로 키를 구축하는 공장을 등록합니다.
Container.RegisterType<Func<string, ISomeInterface>(new InjectionFactory(c=>
{
return new Func<string, ISomeInterface>(x=>
{
return c.Resolve<ISomeInterface>(x)
}
}));
(사람이 키가 공장을 만드는 더 좋은 방법을 알고 있다면 덧붙여 말하자면, 나는 환영하려는 팁)
가 어떻게 단결을 구성 할 수 있습니다 유니티 나에게 SomeClassA의 인스턴스를 구축 할 때, 그것은 또한 것 같은 DependencyA 인스턴스를 삽입 하시겠습니까? Unity가 SomeClassB의 인스턴스를 빌드 할 때와 마찬가지로 DependencyB 인스턴스를 삽입합니다.
감사합니다.
편집 : 당신이 하나의 인터페이스에 대한 두 가지 구체적인 유형을 등록하면, 유니티를 해결하기 위해 어느 알 수 없습니다 내 오타
동일한 개체 그래프에서 동일한 인터페이스의 여러 구현을 시작하면 [Pure DI] (http://blog.ploeh.dk/2014/06/10/pure-di/)가 더 나은 옵션이됩니다. 자세한 내용은이 기사를 참조하십시오. http://criticalsoftwareblog.com/index.php/2015/08/23/why-di-containers-fail-with-complex-object-graphs/ –
공장 추상화 사용 (비록'Func'을 사용한다고해도) 일반적으로 [디자인 냄새] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=100)입니다. –
Steven