【发布时间】:2019-05-01 08:46:00
【问题描述】:
我误解了Autofac documentation 将参数传递给 Resolve 方法。以下是我的意思的简约示例:
示例
https://dotnetfiddle.net/fz5eTp
public static void Main()
{
var cb = new ContainerBuilder();
cb.RegisterType<A>();
cb.Register<B>((c, p) => new B(p.TypedAs<C>()));
using (var c = cb.Build())
{
// works
c.Resolve<B>(TypedParameter.From(new C()));
// fails
c.Resolve<A>(TypedParameter.From(new C()));
}
}
public class A { public A(B b) { } }
public class B { public B(C c) { } }
public class C { }
预期
我预计 TypedParameter 会被传递到 B 类。
不幸的是,异常消息“序列不包含元素”表明没有传递任何参数。
问题
如何将参数(仅在 Resolve 时知道)传递给较低级别的构造函数?或者在这个具体示例中,当解析 A 时,如何将 C 参数传递给 B。
【问题讨论】:
-
确保您的问题是独立的。请将所有相关代码 sn-ps 和异常详细信息作为问题的一部分。
-
@TravisIllig。 “弄清楚如何在运行时确定参数并将其包装在提供程序或 lamda 表达式注册中”-> 您能否指出如何为每次由不同 json 提供的对象实现的方向运行时间?
-
我不明白你在问什么——“不同的 json”从哪里来? “在哪里”很重要。这是您需要在问题中包含的信息才能获得足够的答案。
标签: c# dependency-injection inversion-of-control autofac