StructureMap异常代码205缺少请求的实例属性

时间:2010-02-11 23:26:53

标签: structuremap

我正在尝试最新版本的StructureMap,以了解IoC容器等。作为我的第一次测试,我有以下课程:

public class Hospital
    {
        private Person Person { get; set; }
        private int Level { get; set; }

        public Hospital(Person employee, int level)
        {
            Person = employee;
            Level = level;
        }

        public void ShowId()
        {
            Console.WriteLine(this.Level);
            this.Person.Identify();
        }
    }

然后我像这样使用StructureMap:

static void Main()
        {
            ObjectFactory.Configure(x =>
                                        {
                                            x.For<Person>().Use<Doctor>();
                                            x.ForConcreteType<Hospital>().Configure.Ctor<int>().Equals(23);
                                        });

            var h = ObjectFactory.GetInstance<Hospital>();

            h.ShowId();
        } 

所以我将Doctor对象作为第一个构造函数param传递给Hospital,我正在尝试将level param设置为23.当我运行上面的代码时,我得到:

  

未处理的例外情况:   StructureMap.StructureMapException:   StructureMap例外代码:205   缺少请求的Instance属性   InstanceKey的“级别”   “5f8c4b74-a398-43f7-   91d5-cfefcdf120cf“

所以看起来我根本没有设置level参数。有人能指出我正确的方向 - 如何在构造函数中设置level参数?

干杯。 雅各

1 个答案:

答案 0 :(得分:12)

你非常接近。您在依赖表达式而不是Is方法上意外使用了System.Object.Equals方法。我还建议在配置常用类型(如字符串或值类型(int,DateTime))时指定构造函数参数名称以避免歧义。

以下是我对您要找的内容的测试:

    [TestFixture]
public class configuring_concrete_types
{
    [Test]
    public void should_set_the_configured_ctor_value_type()
    {
        const int level = 23;
        var container = new Container(x =>
        {
            x.For<Person>().Use<Doctor>();
            x.ForConcreteType<Hospital>().Configure.Ctor<int>("level").Is(level);
        });

        var hospital = container.GetInstance<Hospital>();

        hospital.Level.ShouldEqual(level);
    }
}