Платформа: C# 2.0 Использование: Castle.DynamicProxy2AOP, DataMappers и фабрики, могут ли они работать вместе?
я боролся в течение недели в настоящее время пытается найти хорошую стратегию, чтобы переписать мой DAL. Я пробовал NHibernate и, к сожалению, это не очень понравилось моему проекту. Итак, я пришел с этим взаимодействием до сих пор:
Я первым начать с регистрацией моего DTO и мои картостроители данных:
MetaDataMapper.RegisterTable(typeof(User)):
MapperLocator.RegisterMapper(typeof(User), typeof(UserMapper));
Это отображает каждый DTO, поскольку он зарегистрирован с помощью пользовательских атрибутов на свойствах DTO по существу:
[Column(Name = "UserName")]
Я тогда Mapper, которая принадлежит каждому DTO, поэтому для этого типа было бы UserMapper. Этот обработчик данных обрабатывает вызов моей оболочки ADO.Net, а затем сопоставляет результат с DTO. Тем не менее я участвую в процессе обеспечения глубокой загрузки и последующей ленивой загрузки и, следовательно, там, где я застрял. В принципе, мой пользовательский DTO может иметь объект Address (FK), который требует, чтобы другой компоновщик заполнял этот объект, но я должен определить, использовать его во время выполнения.
Моя проблема заключается в том, чтобы обрабатывать типы без явного перечня их списка (не говоря уже о головной боли, которая всегда должна была обновлять этот список) каждый раз, когда мне нужно определить, какой картограф вернется. Поэтому в моем решении был класс MapperLocator, который я зарегистрировал (как указано выше) и возвратил интерфейс IDataMapper, который реализуют все мои картотеки данных. Затем я могу просто применить его для ввода UserMapper, если я имею дело с объектами User. Однако это не так просто, когда я пытаюсь определить тип Data Mapper для возврата во время выполнения. Поскольку generics должны знать, что они находятся во время компиляции, используя AOP, а затем передача типа во время выполнения не является опцией без использования отражения. Я уже делаю справедливое отражение, когда я сопоставляю DTO с таблицей, читая атрибуты и т. Д. Плюс мой MapperFactory использует отражение для создания правильного отображения данных. Поэтому я пытаюсь сделать это без размышлений, чтобы максимально снизить эти дорогие звонки.
Я думал, что решение можно найти по обходному интерфейсу, но я еще не смог реализовать эту идею. Поэтому я подумал, что решение, возможно, будет заключаться в использовании делегатов, но я не знаю, как реализовать эту идею. Итак ... откровенно ... Я потерян, ты можешь помочь, пожалуйста?