C#,Autofac:Register <>中未提供NamedParameter

时间:2019-03-11 20:55:40

标签: c# inversion-of-control autofac

此刻我正在尝试一些autofac功能,并且在NamedParameter方面苦苦挣扎。

我创建了一个非常简单的示例,其中IFooHappyFooSadFoo实现。 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

谢谢。

0 个答案:

没有答案