Я пытаюсь реализовать шаблон работы/репозитория, как описано здесь: 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 можно поменять, если не на лучший подход. Если у меня все перевернуто, скажите, пожалуйста,
Это было перефразировано и ответили здесь: Unity framework - повторное использование экземпляра
Решение заключается в использовании ContainerControlledLifetimeManager - aka Singleton: http://msdn.microsoft.com/en-us/library/dd203242.aspx
'Chuck Norris' of programming
Код является королем, Предоставляйте ссылки на связанные ресурсы, Не бойтесь удалять (или редактировать) бесполезные ответы, Не «отвечать и бегать"