选择要与StructureMap一起使用的构造函数

时间:2010-02-13 17:45:33

标签: .net structuremap

我知道我可以指定一个与DefaultConstructor属性一起使用的构造函数。但是,我也想在某些情况下能够使用不同的构造函数。有没有办法我可以用StructureMap注册两个构造函数,然后在调用ObjectFactory.GetInstance()时选择使用哪一个?

1 个答案:

答案 0 :(得分:2)

我不相信你可以在StructureMap中做到这一点。您可以将要查找的单独构造函数行为拉入适配器类。然后您的代码可以依赖于必要的适配器类。

    public class FirstBehavior : IBehavior
{
    private WrappedClass _wrappedClass;
    public FirstBehavior()
    {
        _wrappedClass = new WrappedClass(<first constructor>)
    }
}

public class SecondBehavior : IBehavior
{
    private WrappedClass _wrappedClass;
    public SecondBehavior()
    {
        _wrappedClass = new WrappedClass(<second constructor>)
    }
}

[TestFixture]
public class Test
{
    [Test]
    public void configure_container()
    {
        var container = new Container(config =>
        {
            config.For<IBehavior>().Use<FirstBehavior>().Named("first");
            config.For<IBehavior>().Use<SecondBehavior>().Named("second");
        });

        container.GetInstance<IBehavior>("first").ShouldBeOfType(typeof(FirstBehavior));
        container.GetInstance<IBehavior>("second").ShouldBeOfType(typeof(SecondBehavior));
    }
}