Создание объектов Entity Framework с шаблоном Unity for Unit of Work / Repository

1

Я пытаюсь реализовать шаблон работы/репозитория, как описано здесь: http://blogs.msdn.com/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx

Это требует, чтобы каждый репозиторий принимал реализацию IUnitOfWork, например, EF datacontext, расширенный с помощью частичного класса, чтобы добавить интерфейс IUnitOfWork. Я на самом деле использую .net 3.5, а не 4.0. Мой базовый конструктор Data Access выглядит следующим образом:

public DataAccessLayer(IUnitOfWork unitOfWork,
                       IRealtimeRepository realTimeRepository)
{
    this.unitOfWork = unitOfWork;
    this.realTimeRepository = realTimeRepository;
}

До сих пор так хорошо.

То, что я пытаюсь сделать, это добавить Injection Dependency с помощью 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 и использовал его только для времени жизни метода репозитория. Это отличается тем, что я создаю экземпляр Entity Framework как реализацию IUnitOfWork во время утверждения Unity Resolve, и этот экземпляр, который мне нужно передать в конструктор репозитория, - это возможно, и если да, то как?

Мне интересно, могу ли я сделать свойство Repository a и пометить его как зависимость, но это все равно не решит проблему создания репозитория с объектом IUnitOfWork, с которым DAL решается с помощью

Я не уверен, правильно ли понял этот шаблон и с радостью советю о его наилучшем способе его реализации. Entity Framework остается, но Unity можно поменять, если не на лучший подход. Если у меня все перевернуто, скажите, пожалуйста,

Теги:
entity-framework
repository-pattern
unit-of-work

1 ответ

1

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

Решение заключается в использовании ContainerControlledLifetimeManager - aka Singleton: http://msdn.microsoft.com/en-us/library/dd203242.aspx

Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню