我的类型Model
有一个构造函数:
Model(string name, IFoo dependency)
我想使用工厂从Model
创建container
的实例,每次使用不同的名称值。为此,我注册我的Model
类型,然后注册工厂:
var builder = new ContainerBuilder();
builder.RegisterType<Model>();`
var container = builder.Build();
var factory = builder.Resolve<Func<string, Model>>();
问题出现在后面,我的类Consumer
具有以下构造函数:
public Consumer(IFoo depedency, params Model[] optionalInputs)
当我解决Consumer
时,我得到一个例外,因为为了到我的工厂我必须注册Model
,即使我不想解决它,除非通过工厂。我不想使用NamedParameter
或类似的东西,因为没有默认实例可供使用,我只希望将任何可选集合(例如params Model[] ...
)设置为空数组遇到了。
`
答案 0 :(得分:2)
您可以更改Consumer
的注册以指定实例的构造方式:
builder.Register(c => new Consumer(c.Resolve<IFoo>()));
这样params
参数将被忽略。
我只是希望任何可选集合(例如params Model [] ...)在遇到它们时设置为空数组。
从我的观点来看,这听起来像是你设计中的一个缺陷。您希望Autofac创建Consumer
实例,但您不希望它设置optionalInputs
参数。在这种情况下,为什么不简单地删除参数?
根据您的评论,我猜您可以为Model[]
类型添加明确的注册:
builder.RegisterInstance<Model[]>(Array.Empty<Model>());
我尝试过这种方法,似乎达到了你的目标。