我正在按照Repository Pattern
與Unit Of Work
模式的組合使用教程。工作模式單元 - 使用工廠獲取軟件倉庫
我主要有:以上
interface IRepository<T> where T : class
{
//...
}
class Repository<T> where T : class
{
//Implemented methods
}
interface IFooRepository
{
IQueryable<Foo> GetFoos();
}
class FooRepository : Repository<Foo>, IFooRepository
{
IQueryable<Foo> GetFoos() {}
}
代表我的repositories
,在基本意義。然後我有一個Uow
類。
public class MyUow
{
public void Commit() { }
public IRepository<Bar> Bars { get { return GetStandardRepo<Bar>(); } }
public IFooRepository Foos { get { return GetRepo<IFooRepository>(); } }
private IRepository<T> GetStandardRepo()
{
return RepositoryProvider.GetRepoistoryForEntityType<T>();
}
private T GetRepo<T>()
{
return RepositoryProvider.GetRepository<T>();
}
}
我的問題是即將在那裏我下面只有永遠的教程instansiates在RepositoryProvider
類Dictionairy<Type, object>
和似乎並沒有坐滿,所以在使用的方法是行不通的。
public virtual T GetRepository<T>(Func<DbContext, object> factory = null) where T : class
{
//Look for T in the dictionairy by typeof(T)
object repoObj;
Repositories.TryGetValue(typeof(T), out repoObj);
if (repoObj != null)
return (T)repoObj;
//Not found or a null value, make a new instance of the repository.
return MakeRepository<T>(factory, Context);
}
private T MakeRepository<T>(Func<DbContext, object> factory, DbContext dbContext) where T : class
{
var f = factory ?? _repositoryFactories.GetRepositoryFactory<T>();
if (f == null)
//Exception here because this is null
throw new NotImplementedException("No factory for repository type");
var repo = (T)f(dbContext);
Repositories[typeof(T)] = repo;
return repo;
}
我的問題基本上是什麼正確的方式來實現這種模式,我哪裏出錯了?我應該使用已知存儲庫列表來創建Dictionairy<Type, Func<DbContext, object>
嗎?這看起來很髒。我瘋狂地試圖解決這個問題!
在此先感謝。
什麼一個回合的鏈接教程 – Tar 2013-03-26 16:08:27
@Tar這只是一個輔助類在'Pluralsight'上,所以大多數人都無法訪問它。 – LukeHennerley 2013-03-26 16:22:14
我會說,如果你不能根據教程構建一個示例解決方案,那麼這是一個糟糕的教程。 這個問題本身有點虛擬,不容易回答... – Tar 2013-03-26 20:17:12