C# Autofac为使用RegisterAssemblyTypes加载的类型传递命名参数
我正在使用如下命名参数在Autofac中注册某些类型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);
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));
});