2010-02-15 7 views
1

나는 콘크리트 유형 구조지도 다음과 같은 방법으로 구성 할 수 있다는 것을 알고 : 당신이 사전의 종류를 알고있는 경우StructureMap : 런타임에 구체적인 클래스를 구성 하시겠습니까?

ForRequestedType<Rule>().TheDefault.Is.Object(new ColorRule("Green")); 

이 작동합니다. 나는 그것을 실행 시간에하고 싶다. 그리고 방법이있는 것처럼 보이지 않는다. 어떤 사람이 나를 계몽 할 수 있습니까? 내가하고 싶은 것은 다음과 같은 것입니다 : (이 구조지도에서 지원하지 않는 것으로 나타납니다)

ForRequestedType(typeof(Rule)).TheDefault.Is.Object(new ColorRule("Green")); 

나는 구조 맵의 구성에 대한 래퍼 일하고 있어요 때문에 이것에 대한 이유입니다. 그리고 나는 그 유형을 미리 알지 못할 것입니다. .Object (새로운 ColorRule ("Green"))에 대해서는 대신 요청에 따라 객체를 실제로 생성하는 대리자를 대신 전달할 것입니다.

답변

2

최근 Jeremy는 유형에 맞는 빌더로 Func을 구성하는 기능을 추가했습니다. 델리게이트/람다를 빌더로 사용하는 예제가 있습니다.

public interface IRule 
{ 
    string Color { get; set; } 
} 

public class ColorfulRule : IRule 
{ 
    public string Color { get; set; } 

    public ColorfulRule(string color) 
    { 
     Color = color; 
    } 
} 

[TestFixture] 
public class configuring_delegates 
{ 
    [Test] 
    public void test() 
    { 
     var color = "green"; 
     Func<IRule> builder =() => new ColorfulRule(color); 

     var container = new Container(cfg=> 
     { 
      cfg.For<IRule>().Use(builder); 
     }); 

     container.GetInstance<IRule>().Color.ShouldEqual("green"); 

     color = "blue"; 

     container.GetInstance<IRule>().Color.ShouldEqual("blue"); 
    } 
} 
+0

시도해 주셔서 감사하지만 제네릭을 사용할 수 없습니다. 런타임에 빌드 타임에 유형을 알 수 없으므로 사용할 수 없습니다. 또한, 내 문제는 인터페이스가없는 개체로 작업해야합니다. cfg.For (typeof (IRule)). (builder)를 사용하지만 구조체 맵에서 예외가 발생합니다. 구조체 구성 오류 : 오류 : 104 ColorfulRule을 IRule 유형에 연결할 수 없습니다. – 7wp

+0

필자는 코드 수정을 통해 작동하도록 만들었습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – 7wp

+0

필요에 따라 다행이라면 다행입니다. 유감스럽게도 컨테이너 작업을 훨씬 쉽게 해주는 인터페이스를 사용할 수 없으며 추상화를보다 잘 제어 할 수 있습니다. – KevM

관련 문제