2

我使用 nuget 的 .net5 和 .netStandard。解决方案的结构很简单——带有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;
    }
}

由于 Swashbuckle.AspNetCore (swagger) 的使用,webapi 项目的控制器的规则 - 从 Controller 类继承。如果我从 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?)是什么?

4

1 回答 1

2

不确定,但请检查您是否已经为您的 EcoSpace 类型启动过一次 ViewModel 的使用:

ViewModelDefinitionsInApplication.Init(_es);
于 2021-10-25T11:35:06.790 回答