params参数的Autofac错误

时间:2016-08-09 18:38:53

标签: c# autofac

我的类型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[] ...)设置为空数组遇到了。 `

1 个答案:

答案 0 :(得分:2)

您可以更改Consumer的注册以指定实例的构造方式:

builder.Register(c => new Consumer(c.Resolve<IFoo>()));

这样params参数将被忽略。

  

我只是希望任何可选集合(例如params Model [] ...)在遇到它们时设置为空数组。

从我的观点来看,这听起来像是你设计中的一个缺陷。您希望Autofac创建Consumer实例,但您不希望它设置optionalInputs参数。在这种情况下,为什么不简单地删除参数?

更新

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

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

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