2012-08-23 21 views
1

我試圖根據標誌返回兩個存儲庫實例之一。我的倉庫接口和實現看起來像這樣:c# - 動態返回通用接口

public interface IRepository<T> 
{ 
    T Insert(T entity); 
    void Delete(T entity); 
    IEnumerable<T> SearchFor(Expression<Func<T, bool>> predicate); 
    IEnumerable<T> GetAll(); 
    T SearchForFirst(Expression<Func<T, bool>> predicate); 
    bool Has(Expression<Func<T, bool>> predicate); 
} 

class Repository<T> : IRepository<T> where T : class { ... implementation here ...} 

,這是返回倉庫的兩個實例的一個應該是這個樣子的方法:

public IRepository<T> GenerateRepository(bool flag) 
    { 
     if (flag) { 
      return new Repository<MyFirstType>(); 
     } else { 
      return new Repository<MySecondType>(); 
     } 
    } 

任何人都可以點我在正確的方向至於這究竟應該如何寫?

由於

+1

這實際上沒有意義。你爲什麼想這麼做? – SLaks

+0

我想我只是在考慮錯誤的問題 –

回答

5

如果兩種類型都有一個共同的基類型或接口,並且是該接口的協變是(這你不是),其可以只工作:

public IRepository<CommonAncestor> GenerateRepository(bool flag) 
{ 
    if (flag) { 
     return new Repository<MyFirstType>(); 
    } else { 
     return new Repository<MySecondType>(); 
    } 
} 

它不有意義返回一個未指定類型的IRepository;通用成員將不可用。