简体   繁体   English

在Autofac中使用同一接口注册多个对象

[英]Registering multiple objects with same interface in Autofac

I'm calling the below code in XYZManager class's constructor and the application is working. 我在XYZManager类的构造函数中调用以下代码,该应用程序正在运行。

var handlers = new ITableType[]
{
    new AbcHandler(new Logger(), new Repository()),
    new OtherHandler(new Logger(), new Repository())
    /*etc...*/
};

XYZManager , Logger and Repository are registered in my application using Autofac. XYZManagerLoggerRepository使用Autofac在我的应用程序中注册。

The problem is I will have around 25 handlers when I go live and so would like very much a way to have a more maintainable code... 问题是,当我上线时,我将有大约25个处理程序,因此非常想拥有一种更具可维护性的代码...

I hope I have been able to explain my problem. 我希望我能够解释我的问题。

EDIT: What I would like to know is how to register my handlers in autofac and what changes do I need to make to my above code.. 编辑:我想知道的是如何在autofac中注册我的处理程序,以及需要对上述代码进行哪些更改。

I guess I could register every handler like this : 我想我可以像这样注册每个处理程序:

builder.RegisterType<AbcHandler>().As<ITableType>()

But how do I change my XYZManager class's constructor 但是如何更改XYZManager类的构造函数

After you register your implementors of ITableType , you can define your constructor like so... 注册ITableType的实现者ITableType ,可以像下面这样定义您的构造函数。

public XYZManager(ITableType[] handlers, /* other params... */)
{

}

and Autofac will give you an array with one of each of your registered ITableType objects. Autofac将为您提供一个包含每个已注册ITableType对象之一的数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM