내 개체를 확인하는 데 Unity IoC 컨테이너를 사용하고 있습니다. 그러나 문제가 생겼습니다. 하나 이상의 생성자가있을 때 - 유니티는 어떤 것을 사용할지를 어떻게 알 수 있습니까? 하나가 있고 하나도없는 경우 매개 변수가있는 매개 변수를 사용하는 것 같습니다. 명시 적으로 사용할 생성자를 말할 수 있습니까?Unity IoC 컨테이너에 사용할 생성자를 지정하십시오.
특히 두 개의 생성자가있는 다음 Person 클래스와 비슷한 케이스가있었습니다. 이 경우 IoC 컨테이너에서 매개 변수없이 기본 생성자를 사용하지만 매개 변수가있는 컨테이너를 선택합니다.
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Person
{
private string _name;
public Person()
{
_name = string.Empty;
}
public Person(SomeValueObject obj)
{
_name = obj.Name;
}
}
이것은 분명히 SomeValueObject를 만들 수 없어서 실패합니다. 즉, 문자열 매개 변수에 무엇을 주입해야하는지 알지 못합니다. 그 오류는 다음과 같습니다.
"MyApp.Person", name = ""을 (를) 입력하지 못했습니다. 예외 메시지 : 현재 빌드 작업 (빌드 키 [빌드 키 [MyApp.Person, null]) 실패 : 생성자 MyApp.Person (MyApp.SomeValueObject obj)을 호출 할 때 매개 변수 obj를 확인할 수 없습니다. (전략 형 BuildPlanStrategy 인덱스 3)
용기 등록 :
Container.RegisterType<Person, Person>(new Microsoft.Practices.Unity.ContainerControlledLifetimeManager());
그리고 해결은 :
var person = Container.Resolve<Person>();
인터페이스를 사용하는 IoC의 요점은 무엇입니까 ??? – Martin
물론, 나는 그것을 대부분합니다. 그러나 이것은 질문에 영향을 미치지 않았습니다. – stiank81
@Martin 많은 프로그래머가 클래스를 사용하고 인터페이스를 만든 다음 하나의 인터페이스 만 구현하는 가짜 일반성을 피합니다. 또한 대부분의 엔터프라이즈 애플리케이션에서 볼 수있는 철저한 IoC 배선 문제를 피할 수 있지만 필요에 따라 일부 구현을 전환 할 수도 있습니다. http://programmers.stackexchange.com/questions/133471/writing-testable-code-vs-avoiding-speculative-generality –