Я реализовал шаблон хранилища с постоянным невежеством. Реализация репозитория взаимодействует только с объектами моей сущности, IUnitOfWork
и ITable<T>
интерфейсами. Предполагается, что IUnitOfWork
не используется повторно, а представляет собой одну транзакцию. До сих пор я реализовал в памяти, а также версии Linq-to-Sql IUnitOfWork
и ITable<T>
.
Моя проблема заключается в том, что из-за внедрения IUnitOfWork
в хранилище у меня возникает необходимость узнать, как создать новый IUnitOfWork
там, где когда-либо используется хранилище. Поскольку это основной элемент, который должен быть подключаемым, создается впечатление, что я сделал что-то не так. Общая схема использования выглядит примерно так:
FooUnitOfWork unitOfWork = new FooUnitOfWork();
Repository repos = new Repository(unitOfWork);
// ...act upon repos
unitOfWork.Save();
Теперь кажется, что мне нужен какой-то другой шаблон, чтобы разрешить каждому использованию хранилища в приложении для получения правильной единицы работы (например, в памяти, L2S и т. Д.).
Каков наиболее подходящий для этого шаблон? Я смотрел на дискуссию Фаулера по теме , но ни один из его примеров, похоже, не подходит. Я уже чувствую, что количество абстракции, которое у меня есть, больше, чем мне бы хотелось, поэтому построение еще одной косвенности кажется чрезмерным.
В данный момент я склоняюсь к какому-то провайдеру для всего приложения, который можно настроить для получения правильного IUnitOfWork
. Я неосновный или это то, что нужно, чтобы быть действительно независимым от реализации?