构造函数使用Autofac解析通用接口的集合

时间:2015-01-05 16:59:47

标签: c# generics autofac

我有很多特定通用接口的实现,并希望在构造函数中解析所有这些实现。当然,我可以在构造函数中添加每个实现。这将导致构造函数具有超过30个参数,这些参数在查看和开发时并不是很好。

在对此问题进行一些研究时,我发现可以在构造函数中注入IEnumerable接口,有点像IEnumerable<IScriptExecution> scriptExecutionImplementations

这就是我正在寻找的东西,但我需要它是这样的:

public TheConstructor(IEnumerable<IScriptExecution<T>> scriptExecutionImplementations)
{}

是否可以使用Autofac?

在构造函数中注入所有IScriptExecution<T>

以下是我的注册类摘录:

builder.RegisterType<Library.ShardManager.Execution.DataScript.Users>().As<IScriptExecution<DBUser>>();
builder.RegisterType<Library.ShardManager.Execution.DataScript.Companies>().As<IScriptExecution<DBCompany>>();

注意:我认为我不需要使用Open Generics,因为我已经知道了类型,因此您无法在构造函数中使用开放式泛型。

根据Jim Bolla在评论部分的要求,我想要如何使用它。 目前我已经有了这个构造函数:

public MoveShardletData(Guid shardletId, ShardLocation oldLocation, ShardLocation newLocation, ILog log,
            IScriptCreator<DBAnalyticsInvitation> scriptAnalyticsInvitation, IScriptCreator<DBAnalyticsPromotion> scriptAnalyticsPromotion,
            IScriptCreator<DBAnalyticsRetailerSubscriptionModule> scriptAnalyticsRetailerSubscriptionModule, IScriptCreator<DBAnalyticsRetailerSubscription> scriptAnalyticsRetailerSubscription, //and the list goes on...

我要使用IScriptCreator<T>对象的代码片段看起来有点像这样:

var analyticsInvitations = GetTheAnalyticsInvitationObjects(someLocalVariableInTheCurrentScope)
var script = scriptAnalyticsInvitation.Insert(analyticsInvitations);
sb.Append(script);
//With all IScriptCreator<T> objects listed here in the same fashion.

如果可以在循环中完成这将是很好的。由于someLocalVariableInTheCurrentScope有点难以提取这段代码。 集合analyticsInvitationsT类型。如果我可以访问Autofac容器,我可以手动解决正确的IScriptCreator<T>,但这样做不会被告知。

0 个答案:

没有答案