此刻我正在尝试一些autofac功能,并且在NamedParameter方面苦苦挣扎。
我创建了一个非常简单的示例,其中IFoo
由HappyFoo
和SadFoo
实现。 IFooUser
在构造函数中需要一个IFoo
对象,并使用该对象将某些内容打印到控制台。
以下代码显示了我如何尝试构建一个IFooUser
对象,该对象应基于“得分”值使用一个IFoo
对象。
var builder = new ContainerBuilder();
builder.RegisterType<NormalFooUser>().As<IFooUser>();
builder.Register<IFoo>((context, parameters) =>
{
var score = parameters.Named<int>("score"); // ! Exception !
if (score >= 100)
{
return new HappyFoo();
}
return new SadFoo();
});
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
scope.Resolve<IFooUser>(new NamedParameter("score", 90)).useFoo();
}
不幸的是,当我执行这段代码时,parameters
序列没有任何值=>异常!当我决定使用IFoo
时,一切正常:
scope.Resolve<IFoo>(new NamedParameter("score", 90)).foo(); // Works
但这不是我想要做的。因此,我想知道如何构造一个IFooUser
对象的IFoo
对象,该对象对应于NamedParameter的“得分”。
完整的代码示例可以找到here as gist
谢谢。