StructureMap:在运行时配置具体类?

时间:2010-02-15 19:29:59

标签: structuremap ioc-container

我知道可以通过以下方式使用Structure Map配置Concrete Types:

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

如果您提前知道类型,则此方法有效。我想在运行时这样做,似乎没有办法。有人能开导我吗?我想做的事情如下:(结构图似乎不支持)

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

原因是因为我正在为结构图的配置工作。而且我不会提前知道这种类型。对于.Object(new ColorRule(“Green”)),我将传递一个委托,实际上是根据请求构造对象。

1 个答案:

答案 0 :(得分:2)

最近,Jeremy添加了将Func配置为您的类型的构建器的功能。以下是使用委托/ lambda作为构建器的示例。

    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");
    }
}