在自定义服务中调用 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);
我使用 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);