StructureMap - 在具体请求上实例化接口x实例的属性

时间:2010-02-23 14:35:59

标签: c# structuremap ioc-container

在构建接口IDummy的实例时,如何连接structuremap以注入属性。

假设我有一个名为Dummy的具体类,它实现了IDummy接口。

Dummy类有两个属性,第一个叫DataContext实现IDataContext,第二个属性只是一个名为MyDummyString的基本字符串..

然后第二个IDummy实现名为DummyConcrete2,只有一个属性MyDummyString(如上所述)。

如何在Structure Map中连接它,因此当我请求具体的DummyConcrete2时,默认情况下会注入属性。谷歌搜索了很多,但还没有弄明白。 StructureMap文档似乎是几个旧版本(许多已弃用的方法)..

任何能够阐明这一点的评论都会很棒!

谢谢!

1 个答案:

答案 0 :(得分:1)

正如Mark在他的评论中提到的那样,你通常不会直接依赖具体对象。但您可以配置StructureMap如何构造具体对象。以下是使用最新配置DSL的示例。

public interface IFoo { }
public class Foo : IFoo { }
public class Foo2 : IFoo { }
public interface IDummy
{
    IFoo Foo { get; set; }
}
public class Dummy : IDummy
{
    public IFoo Foo { get; set; }
}
public class Dummy2 : IDummy
{
    public IFoo Foo { get; set; }
}

[TestFixture]
public class configuring_concrete_types
{
    [Test]
    public void should_use_configured_setter()
    {
        var container = new Container(cfg =>
        {
            cfg.ForConcreteType<Dummy>().Configure.Setter<IFoo>().Is(new Foo());
            cfg.ForConcreteType<Dummy2>().Configure.Setter<IFoo>().Is(new Foo2());
        });

        container.GetInstance<Dummy>().Foo.ShouldBeOfType<Foo>();
        container.GetInstance<Dummy2>().Foo.ShouldBeOfType<Foo2>();
    }
}

我希望这会让你朝着正确的方向前进。