Создание объектов Entity Framework с шаблоном Unity for Unit of Work / Repository - PullRequest
1 голос
/ 09 марта 2010

Я пытаюсь реализовать шаблон 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 можно заменить, если не лучший подход,Если у меня все это с ног на голову, пожалуйста, скажите мне

1 Ответ

1 голос
/ 10 марта 2010

Это было перефразировано и дано здесь ответ: Структура Unity - повторное использование экземпляра

Решение состоит в том, чтобы использовать ContainerControlledLifetimeManager - он же Singleton: http://msdn.microsoft.com/en-us/library/dd203242.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...