在自定义服务中调用 AsTajson 的派生属性

Derived attribute with AsTajson call in the custom service

我使用 nuget 的 .net5 和 .netStandard。解决方案的结构很简单 - class 带有 ecomodel 和 webapi 项目的库。 我已经在 EcoSpace1.cs 中注册了自定义服务,这是很久很久以前生态专家建议的。

public interface IMyService
{
    int Class1Count();
}

public class MyServiceClass : IMyService
{
    private IEcoServiceProvider ServiceProvider { get; set; }

    public MyServiceClass(IEcoServiceProvider serviceProvider)
    {
        ServiceProvider = serviceProvider;
    }
    public int Class1Count()
    {
        var v = ServiceProvider.GetEcoService<IOclService>().Evaluate("Class1.allInstances->size");
        return (int)v.AsObject;
    }
}

webapi 项目控制器的规则 - 从控制器 class 继承 - 由于 Swashbuckle.AspNetCore (swagger) 用法。如果我从 ModelDrivenControllerBase

继承控制器,Swagger 会显示错误

但是上面的代码没问题,GET 工作完美:

public class MySecondEcoServiceController : Controller
{
    [HttpGet]
    public int Get()
    {

        using (EcoSpace1 es=new EcoSpace1())
        {
            es.Active = true;
            int r = es.MyService.Class1Count();
            return r;
        }
    }

}

在我尝试将另一个方法添加到 IMyService 并获取 json 之前,它一直有效。我通过使用 DerivationOcl 向 Class1 添加派生属性来尝试 AsTajson。

Class1.allInstances->first.AsTaJson( 'SampleViewModel',  false )

self.AsTaJson( 'SampleViewModel',  false )

在 MyServiceClass 中,Get 的实现是:

Class1 v = (Class1)ServiceProvider.GetEcoService<IOclService>().Evaluate("Class1.allInstances->first").AsObject;
json = v.Attribute2;

如果我尝试获取此值 - 异常:

Eco.FrameworkImpl.Ocl.EBoldOCLError: 'bughuntinfo internaleval:84  es seems fine.Object reference not set to an instance of an object.'

获取 TaJson 返回值的正确方法(或 EcoService?)是什么?

不确定,但请检查您是否已针对您的 EcoSpace 类型开始使用 ViewModels 一次:

ViewModelDefinitionsInApplication.Init(_es);