Я пытаюсь реализовать шаблон Unit of Work / Repository, как описано здесь: http://blogs.msdn.com/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx
Для этого требуется, чтобы каждый репозиторий принимал реализацию IUnitOfWork, например, текст данных EF, расширенный частичным классом додобавить интерфейс IUnitOfWork.Я на самом деле использую .net 3.5, а не 4.0.Мой базовый конструктор доступа к данным выглядит так:
public DataAccessLayer(IUnitOfWork unitOfWork,
IRealtimeRepository realTimeRepository)
{
this.unitOfWork = unitOfWork;
this.realTimeRepository = realTimeRepository;
}
Пока все хорошо.
Я пытаюсь добавить инъекцию зависимостей с помощью Unity Framework.
Получение контекста данных EF для создания с Unity было приключением, так как у него были проблемы с разрешением конструктора - в конце концов я создал другой конструктор в моем частичном классе с новым перегруженным конструктором и пометил это [InjectionConstructor]
.
[InjectionConstructor]
public communergyEntities(string connectionString, string containerName)
: this()
{
// ...
}
(я знаю, что мне нужно передать строку подключения к базовому объекту, который может подождать, пока все объекты будут правильно инициализированы)
Итак, используя эту технику, я могу с радостью разрешить мой объектный объектный объект как экземпляр IUnitOfWork, таким образом:
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<IUnitOfWork, communergyEntities>();
container.Configure<InjectedMembers>()
.ConfigureInjectionFor<communergyEntities>
(new InjectionConstructor("a", "b"))
DataAccessLayer target = container.Resolve<DataAccessLayer>();
// ...
}
Отлично.Теперь мне нужно создать ссылку на объект репозитория для DataAccessLayer - DAL нужно знать только интерфейс, поэтому я предполагаю, что мне нужно создать его экземпляр как часть оператора Unity Resolve, передав ему соответствующийИнтерфейс IUnitOfWork.
В прошлом я бы просто передал конструктору Repository строку соединения db, и она бы ушла, создала локальный объект Entity Framework и использовала его только на время существования метода Repository.,Это отличается тем, что я создаю экземпляр Entity Framework как реализацию IUnitOfWork во время оператора Unity Resolve, и именно этот экземпляр мне нужно передать в конструктор хранилища - возможно ли это, и если да, то как?
Мне интересно, мог бы я сделать Repository свойством и пометить его как Зависимость, но это все равно не решило бы проблему создания Repository с объектом IUnitOfWork, для которого решается DALс
Я не уверен, правильно ли я понял этот шаблон, и с радостью посоветую лучший способ его реализации - Entity Framework остается, но Unity можно заменить, если не лучший подход,Если у меня все это с ног на голову, пожалуйста, скажите мне