는 수동 모의/스텁 저장소의 삽입을 허용 단위 테스트.
public class RepositoryCollection : IDisposable
{
private Dictionary<Type, object> _repositories = new Dictionary<Type, object>();
private DataContext _context;
public RepositoryCollection() { }
public RepositoryCollection(DataContext context)
{
_context = context;
}
public IRepository<T> Get<T>() where T : class
{
if(!_repositories.ContainsKey(typeof(T)))
_repositories.Add(typeof(T), new LinqToSqlRepository<T>(_context));
return _repositories[typeof(T)] as IRepository<T>;
}
public RepositoryCollection Insert<T>(IRepository<T> repository) where T : class
{
_repositories[typeof(T)] = repository;
return this;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public void SubmitChanges()
{
if (_context != null)
_context.SubmitChanges();
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if(_context != null)
_context.Dispose();
}
}
}
그런 다음, 도메인 서비스, 당신과 같이 사용 :
private RepositoryCollection _repositoryCollection;
public MyDomainService(RepositoryCollection repositoryCollection = null)
{
_repositoryCollection = repositoryCollection ?? new RepositoryCollection(new MyDataContext());
}
public IQueryable<Customer> GetCustomers()
{
return _repositoryCollection.Get<Customer>().Query();
}
public IQueryable<Product> GetProducts()
{
return _repositoryCollection.Get<Product>().Query();
}
.. other methods go here ...