의 컬렉션 주사 (그리고 대답했다) : 내 레지스트리에서 Structure Map - Collection of Dependencies in Constructor구조지도 -이 질문은 내가 이전에 요구했다 질문과 매우 유사 명명 된 인스턴스
을 나는 다음과 같습니다
For<IMyObject>().Add<MyObjectType1>().Named("Type1");
For<IMyObject>().Add<MyObjectType2>().Named("Type2");
For<IMyObject>().Add<MyObjectType3>().Named("Type3");
I 모든 인스턴스를 생성자에 삽입하여 모든 명명 된 인스턴스를 검색 할 수 있습니다. 예제 코드 (StructureMap 예외를 생성) :이 방법에 대한
public class Example
{
private Dictionary<string, IMyObject> _workers;
public Example(Dictionary<string, IMyObject> workers)
{
_workers = workers;
}
public void DoSomeStuff(string mode)
{
var worker = _workers[mode];
worker.DoStuff();
}
}
내 이유는 뭔가 (위의 예 '모드'로 명명 된 인스턴스에 해당하는 것) 처리 방법을 지정하는 외부 구성을 허용하는 것입니다. 다음과 같이
실제 예외입니다 :
StructureMap.StructureMapException occurred
ErrorCode=202
HResult=-2146232832
Message=StructureMap Exception Code: 202
No Default Instance defined for PluginFamily
내가 명명 된 인스턴스를 검색하기 위해 내 방법 DoSomeStuff에 StructureMap 컨테이너를 사용할 수 있다는 것을 알고있다, 그러나,이 안티 패턴의 뭔가 .
- 은 내가 그들의 이름을 참조 할 수 있도록, 명명 된 인스턴스의 사전 (또는 다른 모음)를 주입 할 수 :
그래서 제 질문을 명확히?
더 자세한 설명이 필요하면 다시 말해주세요.
- C 번호 : 4.0
- StructureMap : 2.5.4.0
감사합니다,
그램
감사 @Steven을 다음과 같이
당신은 당신의
Example
을 등록 할 수 있습니다 : 그 중 하나가 정말 사용할 필요하면서 모든 종속성 모든IMyObject
인스턴스를 생성 할 필요가 StructureMap을 방지 응답하는 데 시간이 걸렸습니다. Example의 단일 인스턴스는 반복 호출을 통해 어느 시점에서 IMyObject의 모든 인스턴스를 사용합니다. 예제 클래스는 주로 IMyObject의 올바른 구현을 지시하는 책임이 있습니다. 나는 예제 calss가 요청을 받았을 때 레지스트리에서 사전을 '새로 만들 수있다'는 것을 알고 있지만 더 우아한 해결책이 있기를 바란다. – GinjaNinja@GinjaNinja : 나는 가장 우아한 솔루션을 발견했다. 왜이 솔루션이 당신을 위해 작동하지 않습니까? – Steven
사과, 나는 거기에서 표식에서 조금 빠를지도 모른다. 당신의 해결책은 나를 위해 일하고 나는 대답을 받아 들일 것입니다. 예제 클래스의 추가 '연결'없이 모든 종류의 컬렉션을 제공하기 위해 빌드 된 방법이 있었으면합니다. 한 가지 질문으로 IMyObject의 각 구현에 대해 하나의 객체 만 생성되도록하는 방법을 알고 있습니까? – GinjaNinja