【发布时间】:2011-10-19 14:27:03
【问题描述】:
我有这些接口:
public interface IUnitOfWork
{
IPersonRepository People { get; }
IBookRepository Books { get; }
int Commit();
}
public interface IBookRepository
{
Book GetBookById(int id);
IQueryable<Book> GetAllBooks();
}
public interface IPersonRepository
{
Person GetPersonById(int id);
IQueryable<Person> GetAllPeople();
}
我实现IUnitOfWork如下:
public class SqlUnitOfWork : IUnitOfWork
{
private readonly DbContext dbContext;
public SqlUnitOfWork()
{
dbContext = new DbContext("name=SQLContainer");
}
public IPersonRepository People
{
get { return IoC.Container.Resolve<IPersonRepository>(new { DbContext = dbContext }); }
}
public IBookRepository Books
{
get { return IoC.Container.Resolve<IBookRepository>(new { DbContext = dbContext }); }
}
public int Commit()
{
return dbContext.SaveChanges();
}
}
IBookRepository 和 IPersonRepository 的实现使用了一个以DbContext 作为参数的构造函数,并且这个 DbContext 是在 SqlUnitOfWork(上面的代码)中创建的,我使用 Resolve 方法的重载传递这个参数.
我的问题是,这是正确的做法吗?这是一个好习惯吗?
谢谢!
【问题讨论】:
-
看看this article。它显示了类似的方法。它可能会给你一些想法。
标签: .net dependency-injection castle-windsor ioc-container