如何在困难的情况下配置DI容器?
有3个实体
class First: IFirst
public First (ISecond second)
{}
class Second : ISecond
public Second (IThird third, IOther other)
{}
需要创建第一个。但与此同时:
我认为它会起作用:
auto.RegisterType<First>()
.WithParameter("second", new Second (auto.Resolve<IThird>(), new MyOther(myValue)))
但是没有方法ContainerBuilder Resolve!
如何做到这一点?
答案 0 :(得分:0)
您无法使用ContainerBuilder
解析服务,但您可以使用另一个带有委托参数的重载,该参数可让您访问容器。
cb.RegisterType<First>()
.WithParameter((pi, c) => pi.Name == "second",
(pi, c) => new Second(c.Resolve<IThird>(), new MyOther(myValue)));
或
cb.RegisterType<First>()
.WithParameter((pi, c) => pi.Name == "second",
(pi, c) => c.Resolve<ISecond>(TypedParameter.From<MyOther>(myValue)));