Имеется dll, в которой есть сущности и класс для работы с бд (используется рефлексия). Например, у меня обращение в клиенте DataManager.Instance.User.GetList(); Где DataManager это singleton class. Как можно реализовать это в хосте WCF, не могу определить сущность для работы.
public class AtelierSevice : IAtelierService
{
public int Add(T item)
{
return DataManager.Instance.User.Add(item);
DataManager.Instance. //Здесь необходимо узнать к какому репозиторию я обращаюсь
}
public void Delete<T>(int id)
{
throw new NotImplementedException();
}
public List<T> GetList<T>()
{
throw new NotImplementedException();
}
public void Update<T>(T item)
{
throw new NotImplementedException();
}
}
Возможно я объяснил не понятно.
В WCF дженерики не предусмотрены by design:
Type 'T' cannot be exported as a schema type because it is an open generic type.
Т.е. вот так не получится у вас:
[OperationContract]
void AddItem<T>(T item);
PS Если поискать на английском so то вроде как есть пара сторонних проектов, но сам не пробовал.
PPS Можете написать свой костыль, сериализуя информацию с сохранением информации о том, что за тип был. Но на другой стороне должны уметь работать с этим форматом и производить обратную распаковку.
Update
что вы имеете ввиду, говоря, что тащу CRUD-операции через WCF. Просто у меня в отдельной библиотеке работа с базой. Не понимаю, как предоставить пользователю методы из этой библиотеки. Например, я работаю в коде клиента с классом User, передаю данные на изменение, как мне узнать, что я передал именно User.
При проектировании приложений принято скрывать реализацию, потому что она может поменяться. База данных – это деталь реализации, легко может поменяться: сегодня MS SQL, завтра Oracle, послезавтра – что-то модное из мира NoSql.
Устройство приложения обычно выглядит следующим образом:
Так вот вы предоставляете доступ к слою базы данных (все до единого репозитории) и этим переносите всю логику работы в совершенно неподходящее место. Это как если бы Сбербанк отдал бы вам WCF сервис, которым бы можно было вставлять данные в таблички БД: никакого контроля бизнес-операций, вставляй что хочешь.
Вам нужно предоставлять доступ к слою сервисов. Вы уже запрещаете вставлять данные напрямую в таблицы, но отдаёте методы, которые сами предварительно будут выполнять проверку бизнес-логики и потом уже сами начнут дёргать нужные репозитории.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При создании файла или при его чтении я хочу указать путь таким образом, чтобы не приходилось вводить имя пользователяКак это делается в windows:...
Есть проект на C#, использующий Entity Framework Code First