При создании контроллеров, контрактов и реализации для службы WCF я использую
Microsoft FxCop 1.35\FxCopSdk.dll
Microsoft FxCop 1.35\Microsoft.Cci.dll
для получения информации о базовых классах бизнес-объектов.
соответствующий фрагмент кода генерирует такой контроллер, как:
выдержка из webservice.tt:
public <#=meth.ReturnType.Name#> <#=meth.Name #> (<#=parametersIn#>) {
return <#=meth.DeclaringType.Name#>.<#=meth.Name#>(<#=parametersOut#>);
}
и обычно генерирует что-то вроде
public Employee GetEmployee (Int64 id) {
return EmployeeController.GetEmployee(id);
}
однако
при представлении обобщений, где meth.ReturnType.Name
- это обобщенная коллекция, генерируются странные символы, и сгенерированный код становится неработоспособным.
например, я сначала генерирую контроллер в сборке BLL, например:
public static PagedList<<#=t.Name#>>
GetAll<#=t.Name#>s(string sortby, int pageindex, int pagesize) {
return <#=t.Name#>.GetPaged(sortby, pageindex, pagesize);
}
, что приводит к:
public static PagedList<Employee>
GetAllEmployees(string sortby, int pageindex, int pagesize) {
return Employee.GetPaged(sortby, pageindex, pagesize);
}
кажется, что все идет хорошо, и сборка строится.
Но потом, когда я использую самоанализ этой сборки для генерации кода в
Сборка WCF, например для генерации сервисных контрактов, таких как:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "<#=meth.Name#><#=parametersTemplate#>")]
<#=meth.ReturnType.Name#> <#=meth.Name#> (<#=parametersIn#>);
генерирует неправильный код:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "GetAllEmployees?sortby={sortby}&pageindex={pageindex}&pagesize={pagesize}")]
PagedList`1<Portal.BLL.BO.Employee> GetAllEmployees (String sortby, Int32 pageindex, Int32 pagesize);
обратите внимание на `1 (апостроф и 1) после returntypename, перед символом ниже, чем в нижней строке. Это происходит со всем сгенерированным кодом, который содержит универсальные типы возвращаемых данных.
Интроспектор обнаруживает здесь что-то не так или это проблема кодирования?