В качестве учебного процесса я попытался реализовать UoW с шаблонами репозитория, и у меня есть следующая настройка:
public interface IUnitOfWork : IDisposable
{
MyEntities Context { get; set; }
string GetConnectionString()
void Complete();
}
public abstract class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class
{
protected MyEntities context;
protected DbSet<TEntity> dbSet;
protected RepositoryBase(IUnitOfWork unitOfWork)
{
context = unitOfWork.Context;
dbSet = context.Set<TEntity>();
}
}
public class ItemRepository : RepositoryBase<Item>, IItemRepository
{
public ItemRepository(IUnitOfWork unitOfWork)
: base(unitOfWork)
{
}
public Item GetById(int id)
{
// return a item
}
}
Чтобы на самом деле использовать ItemRespoitory, я делаю следующее:
using (var unitOfWork = new UnitOfWork())
{
var ItemRepository = new ItemRepository(unitOfWork);
var item = ItemRepository.GetById(1);
}
который отлично работает, и теперь я хочу сделать это, используя IoC / DI с простым инжектором:
var container = new Container();
container.Register<IUnitOfWork, UnitOfWork>();
container.Register<IItemRepository, ItemRepository>();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
Но теперь у меня вопрос, поскольку я ввожу ItemRepository в конструктор контроллера.
public MyController(IItemRepository itemRepository)
{
_itemRepository = itemRepository;
}
как мне избавиться от единицы работы, когда я закончил с репозиторием? потому что мне больше не нужно создавать unitofwork и заключать его в оператор using. Я правильно это делаю? Каким должен быть правильный способ применения DI с UoW и шаблонами репо в моем случае? Спасибо.