将类型化的参数提供给Autofac中的嵌套依赖项

时间:2019-03-14 11:05:00

标签: c# dependency-injection autofac

给我的印象是TypedParameter可以在Autofac的解析过程中用于提供值。

但是,这些参数似乎仅在要解析的显式类型上使用,并且不会在依赖关系链中传播。

有没有办法做到这一点?

public interface IDepA { }

public interface IDepB { }

public interface IDepC { }

public class DepA : IDepA
{
    public DepA(IDepB depB) { }

}

public class DepB : IDepB
{
    public DepB(IDepC depC) { }
}

public class DepC : IDepC { }

[TestMethod]
public void AutofacResolutionTest()
{
    var builder = new ContainerBuilder();

    builder.RegisterType<DepA>().As<IDepA>();
    builder.RegisterType<DepB>().As<IDepB>();

    var container = builder.Build();
    // Works
    var b = container.Resolve<IDepB>(new TypedParameter(typeof(IDepC), new DepC()));
    // Does not work
    var a = container.Resolve<IDepA>(new TypedParameter(typeof(IDepC), new DepC()));
}

1 个答案:

答案 0 :(得分:1)

简短的回答:您不能将参数传递给解析链中间的某个事物。

This is an FAQ in the Autofac docs.