簡體   English   中英

使用Autofac解決繼承類的依賴關系

[英]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.

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