参数的自动错误

本文关键字:错误 参数 | 更新日期: 2023-09-27 18:01:28

我有一个类型Model,有一个构造函数:

Model(string name, IFoo dependency)

我想使用一个工厂来创建Modelcontainer的实例,每次使用不同的名称值。要做到这一点,我注册我的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参数将被忽略。

我只是想要任何可选的集合,如params模型[]…当遇到它们时,设置为空数组

在我看来,这听起来像是你设计中的一个缺陷。您希望autofacc创建您的Consumer实例,但您不希望它设置optionalInputs参数。在这种情况下,为什么不干脆完全删除这个参数呢?

更新

根据您的评论,我猜您可以为Model[]类型添加显式注册:

builder.RegisterInstance<Model[]>(Array.Empty<Model>());

我试过这种方法,似乎达到了你的目标。