簡體   English   中英

在存儲庫模式中使用通用接口

[英]Using generic interface in the repository pattern

我目前正在開發一個帶有EF和Repository模式的MVC 3應用程序。 我創建了一個通用接口,如下所示:

interface IGenericRepository<T>
{
}

一個抽象類如下:

abstract class GenericRepository<TContext ,T> : IGenericRepository<T>
    where TContext : DbContext, new()
{
}

之后我的repo繼承了這兩個:

interface ICardRepository : IGenericRepository<Card>
{
}

class CardRepository : GenericRepository<EfContext, Card>, 
    ICardRepository
{
}

使用Unity我注冊接口和類如下:

container.RegisterType<ICardRepository, CardRepository>();

現在的問題是:我可以使用IGenericRepository而不是ICardRepository嗎? 像這樣:

container.RegisterType<IGenericRepository<Card>, CardRepository>();

理論上我可以,但由於我仍然不知道這種模式是如何工作的,我不確定我是不是在破壞或遺漏某些東西。

一個可能的問題是現在你必須解決IGenericRepository<Card>而不是ICardRepository

這不起作用:

var cardRepository = container.Resolve<ICardRepository>();

相反,你必須這樣做:

var cardRepository = container.Resolve<IGenericRepository<Card>>();

這也意味着如果你正在做類似構造函數注入的事情,你就不能使用:

public class SomethingDependentOnCardRepository
{
    // The parameter type should be IGenericRepository<Card> instead,
    // if you are using Unity to resolve this dependency.
    public SomethingDependentOnCardRepository(ICardRepository cardRepository)
    {
       // code
    }
}

暫無
暫無

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

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