ServiceStack / types / csharp генерирует недопустимые подписи атрибутов в v5.7 - PullRequest
1 голос
/ 10 января 2020

В нашем обновлении до ServiceStack v5.7 файл, сгенерированный NativeTypesService в /types/csharp, теперь генерирует неверный код. Мы используем ASP. Net (НЕ Core),. Net Framework 4.7.2.

В частности, атрибуты References и StringLength создаются с именованными параметрами, что приводит к ошибкам при включении в клиентский проект (с использованием той же версии ServiceStack):

error CS1729: 'StringLengthAttribute' does not contain a constructor that takes 0 arguments
error CS7036: There is no argument given that corresponds to the required formal parameter 'type' of 'ReferencesAttribute.ReferencesAttribute(Type)'

Я проверил историю обвинений соответствующего бита CSharpGenerator, но за годы ничего не изменилось. Я в растерянности.

Как мы можем сгенерировать действительный код, используя конечную точку /types/csharp NativeTypesService?


Я создал минимальный пример проекта ниже, чтобы проиллюстрировать это. Все библиотеки ServiceStack v5.7 (текст, интерфейсы и т. Д. c.). Когда мы понижаем только ядро ​​ServiceStack до v5.6, генерируется ожидаемый результат.

v5.6 Подпись

namespace TestTypes
{

[Route("/Child")]
public partial class Child
{
    public virtual int Id { get; set; }
    [References(typeof(TestTypes.Parent))]
    public virtual int ParentId { get; set; }
}

[Route("/Parent")]
public partial class Parent
{
    public virtual int Id { get; set; }
    [StringLength(100)]
    public virtual string Name { get; set; }
}

}

v5.7 Подпись

namespace TestTypes
{

[Route("/Child")]
public partial class Child
{
    public virtual int Id { get; set; }
    [References(Type=typeof(TestTypes.Parent))]
    public virtual int ParentId { get; set; }
}

[Route("/Parent")]
public partial class Parent
{
    public virtual int Id { get; set; }
    [StringLength(MaximumLength=100)]
    public virtual string Name { get; set; }
}
}

Пример проекта

public class AppHost : AppHostBase
{
    public AppHost() : base("Test", typeof(MyService).Assembly) { }

    public override void Configure(Container container) { }
}

public class MyService : Service
{
    public object Get(Parent request) { return null; }
    public object Get(Child request) { return null; }
}

[Route("/Parent")]
public class Parent
{
    [PrimaryKey]
    public int Id { get; set; }

    [StringLength(100)]
    public string Name { get; set; }
}

[Route("/Child")]
public class Child
{
    [PrimaryKey]
    public int Id { get; set; }

    [References(typeof(Parent))]
    public int ParentId { get; set; }
}

1 Ответ

1 голос
/ 14 января 2020

Эта проблема теперь должна быть решена с помощью последней версии v5.8 ServiceStack .

...