我使用 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?)是什么?