Вероятно, вам не понравится этот ответ, но перегрузка для Page.LoadControl
, которая позволяет указывать тип элемента управления и добавление аргументов конструктора, не привязывает ascx
к выделенному коду и всем связанным дочерним элементам управления. в конечном итоге будет нулевым.
В прошлом я работал над этим, добавляя еще один метод для установки зависимостей после создания пользовательского элемента управления, но это не идеальное решение.
Это сказало, что ты не делаешь ничего плохого. Привязка будет работать правильно, если вы используете Page.LoadControl("~/path/to/mycontrol.ascx")
, но у вас не будет инжектора конструктора.
Я полагаю , что проблема заключается в том факте, что базовый класс на самом деле не имеет отношения с интерфейсной страницей, кроме как через директиву page, которая определяет его как класс code-behind. Ничто не останавливает несколько разных внешних интерфейсов, использующих один и тот же класс, как его код-сзади, поэтому загрузка с помощью Type
делает либо очень трудным, либо полным невозможным определить, каким будет правильное ascx
связывание.
Вы взглянули на Услуги передачи данных ADO.NET. Здесь можно запросить хранилище данных по проводу с linq синтаксисом.
Вы сохраните LINQ к контексту данных SQL, но выставите его сети и позволите Вашим клиентам запрашивать контекст в стандартных операторах LINQ. Необходимо было бы, очевидно, защитить Услуги передачи данных поэтому, только авторизовал клиенты, может соединиться, но по существу с минимальной работой Вы можете получить свой контекст данных "сторона клиента" так сказать.
Вы, вероятно, захотите Услуги передачи данных ADO.NET. Необходимо будет добавить реализацию интерфейса IUpdatable к объектам, и можно использовать LINQ для SQL, Платформы Объекта, SubSonic или многих других. Мы используем шаблоны CodeSmith PLINQO, которые позволяют Вам добавлять эту функциональность к LINQ к SQL.
Универсальный LINQ к WCF не может иметь смысла. В частности, WCF звонит, только выставляют данные в очень особенных методах, которые действительно не соответствуют способу LINQ сделать вещи. Например, мой сервис мог иметь следующий контракт:
List<DAO> GetObjectsInDateRange(DateTime start, DateTime end);
void ExportObjectsToLegacySystem(List<DAO> data);
Как Вы выражаете любого в формате LINQ. В частности, когда запускаются, и конец не члены ДАО. Единственный способ выразить это состоял бы в том, чтобы сервис выставил интерфейс IQueryable, и я не знаю, как возможный, который является.
Теперь, можно всегда делать:
var data = from dao
in wcfService.GetObjectsInDateRange(DateTime.Today,DateTime.Today.AddDays(50))
where dao.AmountOfStuff > 20
select dao;
Однако можно, конечно, создать интерфейс LINQ, адаптированный в соответствии с собственным сервисом. Скажем, Ваш сервис имеет метод:
List<DAO> GetObjects(DAOFilter filterObject);
где DAOFilter является объектом, который указывает все Ваш, "где" критерии, что можно сделать, записать поставщику LINQ, который переводит все Выражения в этот объект DAOFilter. Это было бы невероятно одноразовым решением со значительным объемом работы, таким образом, я отговорю от него.
Я повторяю совет смотреть на Услуги передачи данных ADO.NET.
Вы можете добавить класс LINQ в SQL напрямую в проект WCF и установить режим сериализации на LINQ в класс SQL в однонаправленную. Если вы это сделаете, классы будут отображаться по службе WCF.