我知道可以通过以下方式使用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”)),我将传递一个委托,实际上是根据请求构造对象。
答案 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");
}
}