簡體   English   中英

許多接口實現的 Autofac 注冊

[英]Autofac registration for many interface implementations

我有幾個需要在 Autofac 中注冊的接口的實現,但是我無法找到一種方法來一起完成它們,而不是像我目前擁有的那樣單獨完成它們:

builder.RegisterType<UserDefinedRepository<CType>>().As<IUserDefinedRepository<CType>>();
builder.RegisterType<UserDefinedRepository<LType>>().As<IUserDefinedRepository<LType>>();

CTypeLType具有相同的基類型,並且接口和類實現的 Type 參數具有相同類型的限制。

我已經閱讀了大量有關 Autofac 實現的示例,但大多數示例對於我想要做的事情來說似乎太復雜了,而且文檔也不是很有幫助(從我對它的理解來看!)。

我已經注冊了我所有其他多年來運行良好的存儲庫,但它們都有接口的具體實現:

var baseRepoType = typeof(InfraAbsRepos.IRepository);
builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
    .Where(t => baseRepoType.IsAssignableFrom(t))
    .AsImplementedInterfaces()
    .InstancePerRequest();

按照文檔中的說明嘗試AsClosedTypesOf

builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
       .AsClosedTypesOf(typeof(IUserDefinedRepository<>))
       .InstancePerRequest();

根據您要執行的操作,您可能需要添加Where子句來過濾程序集類型列表; 和/或如果您需要注冊更多接口或類型,您可能想要添加一個AsImplementedInterfaces

如果RegisterAssemblyTypes沒有足夠的靈活性,您始終可以使用反射自己迭代加載的類型集,並且可能將其與Autofac 中的一些開放通用注冊支持相結合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM