代码之家  ›  专栏  ›  技术社区  ›  Tevin

选择要与结构映射一起使用的构造函数

  •  1
  • Tevin  · 技术社区  · 14 年前

    我知道我可以指定一个构造函数与defaultconstructor属性一起使用。但是,我也希望在某些情况下能够使用不同的构造函数。是否有任何方法可以用structuremap注册两个构造函数,然后在调用objectfactory.getInstance()时选择要使用的构造函数?

    1 回复  |  直到 14 年前
        1
  •  2
  •   KevM    14 年前

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

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