[英]Autofac registration for many interface implementations
我有幾個需要在 Autofac 中注冊的接口的實現,但是我無法找到一種方法來一起完成它們,而不是像我目前擁有的那樣單獨完成它們:
builder.RegisterType<UserDefinedRepository<CType>>().As<IUserDefinedRepository<CType>>();
builder.RegisterType<UserDefinedRepository<LType>>().As<IUserDefinedRepository<LType>>();
CType
和LType
具有相同的基類型,並且接口和類實現的 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.