C# Autofac为使用RegisterAssemblyTypes加载的类型传递命名参数

C# Autofac为使用RegisterAssemblyTypes加载的类型传递命名参数,c#,autofac,C#,Autofac,我正在使用如下命名参数在Autofac中注册某些类型 builder.Register<LogRequest>((c, p) => { var param = p.Named<TenantConfigurations>("myparam"); if (param is MyClass) { return new LogRequest(param as MyClass);

我正在使用如下命名参数在Autofac中注册某些类型

 builder.Register<LogRequest>((c, p) =>
    {
        var param = p.Named<TenantConfigurations>("myparam");
        if (param is MyClass)
        {
            return new LogRequest(param as MyClass);
        }
        return null;
    });

是的,使用“WithParameter”扩展可以很容易地做到这一点。例如:

builder.RegisterAssemblyTypes(assembly).WithParameter("param", "value");
更新:

此外,您还可以使用。简单用法示例:

builder.RegisterAssemblyTypes(assembly).OnActivating(args =>
{
    var param = args.Parameters.Named<string>("param");
    args.ReplaceInstance(new HelloWorld(param));
});
builder.RegisterAssemblyTypes(程序集).on正在激活(args=>
{
var param=args.Parameters.Named(“param”);
args.ReplaceInstance(新HelloWorld(param));
});

参数值不是常量,是在解析过程中确定的,父类在解析过程中获取参数并传递。@Chandermani抱歉,我没有看到这个问题。我更新了我的答案。谢谢@Alexandr,我做了类似的事情,但没有使用OnActivatingevent@Chandermani我只发布了一个简单的工作示例,您必须将其扩展为按需要替换的实例类型进行筛选。谢谢
builder.RegisterAssemblyTypes(assembly).OnActivating(args =>
{
    var param = args.Parameters.Named<string>("param");
    args.ReplaceInstance(new HelloWorld(param));
});