假设我有以下层次结构。

class PersonWithJacket
{
    public PersonWithJacket(Jacket jacket)
    {
    }
}

class Jacket
{
    public Jacket(string brand)
    {
    }
}


我在Autofac容器中注册了这些类

        containerBuilder.RegisterType<PersonWithJacket>();
        containerBuilder.RegisterType<Jacket>();


在运行时,我想解析一个PersonWithJacket对象,并且想定义嵌套的string brand类的Jacket构造函数参数。我的第一种方法是像这样使用NamedParameter

        var personWithJacket = container.Resolve<PersonWithJacket>(new NamedParameter("brand", "TheBrand"));


我将其读取为“解析PersonWithJacket对象,如果遇到名为'brand'的构造函数参数,请使用值'TheBrand'”,但无法解析字符串参数。

有没有一种方法可以在运行时定义嵌套对象的构造函数参数的值?

最佳答案

哦,没关系。 ResolvedParameter并没有那么糟糕。

        using (var scope = container.BeginLifetimeScope()) {
            var someDynamicString = "Brand B";

            var personDude = scope.Resolve<PersonWithJacket>(new ResolvedParameter(
                (pi, ctx) => pi.ParameterType == typeof(Jacket),
                (pi, ctx) => ctx.Resolve<Jacket>(new NamedParameter("name", someDynamicString))));
        }

10-08 07:14