配置autofac容器

时间:2015-06-16 10:48:54

标签: c# dependency-injection autofac

如何在困难的情况下配置DI容器?

有3个实体

class First: IFirst
public First (ISecond second)
{}
class Second : ISecond
public Second (IThird third, IOther other)
{}

需要创建第一个。但与此同时:

  1. 必须根据规则配置由Autofac创建IThird。
  2. IOther必须由我提供
  3. 我认为它会起作用:

    auto.RegisterType<First>()
    .WithParameter("second", new Second (auto.Resolve<IThird>(), new MyOther(myValue)))
    

    但是没有方法ContainerBuilder Resolve!

    如何做到这一点?

1 个答案:

答案 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)));