Неправильные символы в Генерации кода и Текстовых шаблонах T4 - PullRequest
1 голос
/ 13 апреля 2011

При создании контроллеров, контрактов и реализации для службы 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, перед символом ниже, чем в нижней строке. Это происходит со всем сгенерированным кодом, который содержит универсальные типы возвращаемых данных.

Интроспектор обнаруживает здесь что-то не так или это проблема кодирования?

1 Ответ

3 голосов
/ 13 апреля 2011

Это не проблема кодирования, PagedList'1<Portal.BLL.BO.Employee> - это то, как выглядит универсальный тип '1 - означает, что это универсальный тип с параметром одного типа. Вам нужно вручную создать этот тип возврата, чтобы он заработал

...