Имеется 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 сервис, которым бы можно было вставлять данные в таблички БД: никакого контроля бизнес-операций, вставляй что хочешь.
Вам нужно предоставлять доступ к слою сервисов. Вы уже запрещаете вставлять данные напрямую в таблицы, но отдаёте методы, которые сами предварительно будут выполнять проверку бизнес-логики и потом уже сами начнут дёргать нужные репозитории.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости