参数的自动错误
本文关键字:错误 参数 | 更新日期: 2023-09-27 18:01:28
我有一个类型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[] ...
被设置为一个空数组,当他们遇到。'
您可以更改Consumer
的注册,以指定如何构造实例:
builder.Register(c => new Consumer(c.Resolve<IFoo>()));
这样params
参数将被忽略。
在我看来,这听起来像是你设计中的一个缺陷。您希望autofacc创建您的我只是想要任何可选的集合,如params模型[]…当遇到它们时,设置为空数组
Consumer
实例,但您不希望它设置optionalInputs
参数。在这种情况下,为什么不干脆完全删除这个参数呢?更新根据您的评论,我猜您可以为Model[]
类型添加显式注册:
builder.RegisterInstance<Model[]>(Array.Empty<Model>());
我试过这种方法,似乎达到了你的目标。