문제를 설명하기 위해 다음은 간단한 설치입니다.범위를 변경하는 Structuremap이있는 다중 생성자?
public interface IFactory{ }
public class Factory : IFactory
{
public Factory()
{
Console.WriteLine("parameterless");
}
//public Factory(int i)
//{
// Console.WriteLine("with parameter : {0}", i);
//}
}
프로그램이이 consoleApp입니다 테스트하기 : 나는이 같은 공장을 가지고. 내 요점을 증명하기에 충분 해.
static void Main(string[] args)
{
Init();
var factory1 = ObjectFactory.GetInstance<IFactory>();
var factory2 = ObjectFactory.GetInstance<IFactory>();
var factory3 = ObjectFactory.GetInstance<IFactory>();
Console.Read();
}
설정 초기화 static 메소드에서 strucutreMap을 설정하십시오. 완벽하게 작동하고, 출력이
이 매개 변수가
이 매개 변수가
매개 변수가
호출 할 때마다 빌드를 보여줍니다
x.For<IFactory>().Use<Factory>();
:이 같은 단 하나의 생성자 및 설정 StructureMap이있는 경우
public static void Init()
{
ObjectFactory.Initialize(x =>
{
//insert Initialization code here.
});
}
새로운 인스턴스.
이제 두 번째 생성자의 주석을 제거했지만 매개 변수가없는 매개 변수를 사용하고 같은 기본 라이프 스타일을 사용하려고합니다. 나는 어떻게 할까?
x.SelectConstructor<IFactory>(() => new Factory());
x.For<IFactory>().Use<Factory>();
는 그냥 작동하지 않습니다 :
나는 것을 시도 누락 요청 인스턴스 속성을 "내가"InstanceKey
내가 이렇게 할 경우x.For<IFactory>().Use(new Factory());
그것은 작동 , 출력은 "매개 변수가없는"매개 변수 일 뿐이므로 각 호출에 대해 새 인스턴스를 작성하지 않습니다. 그것은 내가 통과 한이 특정 인스턴스를 사용하고 있습니다.
유일한 방법은 [DefaultConstructor]를 매개 변수없는 생성자 위에 추가하고 표준 x.For()를 사용하는 것입니다. 하지만이 속성을 추가하고 내 모델 전체에 구성을 전파하고 싶지 않습니다.
도움 말?