[英]Resolve dependencies from inherited classes with Autofac
首先,讓我提供一些示例代碼:
public abstract class BaseEntity { }
public class MyEntity : BaseEntity { }
public class MyCustomEntity : BaseEntity { }
public interface IStore<TEntity> where TEntity : BaseEntity { }
public class BaseStore<TEntity> : IStore<TEntity> where TEntity : BaseEntity { }
public class MyCustomEntityStore : BaseStore<MyEntity> { }
所以基本上我有一個抽象實體和兩個派生類型。 我創建了一個存儲庫類,該存儲庫類隱藏了BaseEntity周圍的所有基本內容(例如,填充“ LastModifiedBy”屬性)。 但是在某些情況下,我需要特定的行為來保存實體,因此我需要派生自BaseStore
並在MyCustomEntityStore
實現自定義行為。 到目前為止,這很容易。
問題是我想使用Autofac解決我的應用程序中的依賴關系。 我的目標是這樣做:
public class SomeClass {
private readonly IStore<MyEntity> MyEntityStore;
private readonly IStore<MyCustomEntity> MyCustomEntityStore;
public SomeClass(IStore<MyEntity> mes, IStore<MyCustomEntity> mces)
{
MyEntityStore = mes;
MyCustomEntityStore = mces;
}
}
我想將BaseStore<MyEntity>
的實例注入IStore<MyEntity>
並將MyCustomEntityStore
IStore<MyCustomEntity>
。 這與MyCustomEntityStore
(具有從基礎存儲派生的具體實現)一起使用時效果很好,但是我不想創建僅繼承BaseStore<MyEntity>
空類。 我注冊了這樣的組件:
builder.RegisterAssemblyTypes(Assembly.Load("Project.Data")).Where(t => t.Name.EndsWith("Store")).AsImplementedInterfaces().InstancePerRequest();
盡管這些實例可以代替這些接口,但是Autofac無法解析IStore<MyEntity>
。
感謝您的所有幫助!
我設法解決了此注冊問題:
builder.RegisterGeneric(typeof(BaseStore<>))
.As(typeof(IStore<>))
.InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.Load("Project.Data"))
.Where(t => t.Name.EndsWith("Store"))
.AsImplementedInterfaces()
.InstancePerRequest();
任何人都可以確認,這是正確的方法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.