1

使用 StructureMap 4,而我是 C# 新手,我想知道为什么会出现编译错误:

var di = new Container(_ =>
{
    // (1) compile error: CS1503: Argument 1: cannot convert from 'StructureMap.IContext' to '...ITest'
    _.For<Func<ITest, ITestRunner>>().Use( arg => new TestRunner(arg) );

    // (2) compiles OK
    Func<ITest, ITestRunner> f1 = arg => new TestRunner(arg);
    _.For<Func<ITest, ITestRunner>>().Use( f1 );

    // (3) with cast compiles ok
    _.For<Func<ITest, ITestRunner>>().Use( (Func<ITest, ITestRunner>)( arg => new TestRunner(arg)));
});

是否有一个紧凑的语法,我不需要f1变量 (2) 并且没有重复类型 (3) 的演员表吗?

4

1 回答 1

1

发生这种情况是因为方法中的类型参数For表示您要为其定义不同实例创建委托的类型或类。在你的代码中Func<ITest, ITestRunner>,它告诉StructureMap我当我想要一个类型的对象时Func<ITest, ITestRunner>,使用我在 中指定的任何内容Use

我的猜测是,您希望地图在添加TestRunneran 时使用 a ITest。在这种情况下,类型参数将只是ITest,如下所示:

_.For<ITest>().Use(arg => new TestRunner(arg));

请注意,即使其他两个代码块确实编译了,它们也不会为您提供所需的结果。相反,对于每个Func<ITest, ITestRunner>StructureMap将使用传递给 的值Use

于 2016-06-04T13:04:57.550 回答