在 ServiceStack 中动态创建操作和服务
Dynamically creating operations and services in ServiceStack
我正在从事一个 ServiceStack 项目,该项目要求我收集命令列表(我有 200 多个命令),并为每个命令创建一个操作和服务。本质上,我正在制作一个 Commanding API,它将允许用户在不使用 UI(公开我的命令)的情况下发送命令。
我正在尝试做的一个简单示例:
(申请开始)
Gather all commands (with some exemptions)
for each command
make an operation and service for that command
map the commands attributes to the new operation and service
我 运行 遇到的问题是创建操作和服务。我不确定 ServiceStack 框架是否支持它以允许动态创建服务和操作,但我真的没有运气找到这样做的方法。为了澄清起见,我所说的动态是指在应用程序启动期间从列表中创建命令,而不是即时创建它们。
有人可以阐明我的理解吗?
感谢您提供的任何帮助,
麦克
委托给多个内部服务的单一服务
我首先考虑是否使用使用 a liberal wildcard route 的单个服务实现来接受多种请求类型,然后根据某些参数委托给不同的服务实现,例如:
[Route("/services/{Type}/{PathInfo*})]
public class DynamicService
{
public string Type { get; set; }
public string PathInfo { get; set; }
}
public class DynamicServices : Service
{
public object Any(DynamicService request)
{
if (request.Type == "type1")
{
//Resolve existing Service and call with converted Request DTO
using (var service = base.ResolveService<Type1Service>())
{
return service.Any(request.ConvertTo<Type1Request>());
}
}
else if (request.Type == "type2") { ... }
}
}
动态生成和注册服务实现
不然可以看看ServiceStack's AutoQuery implementation for an example on how to generate and register dynamic services on the fly。 AutoQuery 查找实现 IQuery<>
接口的请求 DTO,然后生成并注册一个使用它的新服务实现。
它的工作方式基本上与定义的服务相同类,您可以使用代码生成来动态创建服务实现,而不是使用注册现有服务类型,然后可以将其注册到:
appHost.RegisterService(serviceType);
ServiceStack也支持dynamically registering attributes at runtime,例如:
requestDtoType
.AddAttributes(new RouteAttribute("/custom-route"))
.AddAttributes(new RestrictAttribute(RequestAttributes.Json));
我正在从事一个 ServiceStack 项目,该项目要求我收集命令列表(我有 200 多个命令),并为每个命令创建一个操作和服务。本质上,我正在制作一个 Commanding API,它将允许用户在不使用 UI(公开我的命令)的情况下发送命令。
我正在尝试做的一个简单示例: (申请开始)
Gather all commands (with some exemptions)
for each command
make an operation and service for that command
map the commands attributes to the new operation and service
我 运行 遇到的问题是创建操作和服务。我不确定 ServiceStack 框架是否支持它以允许动态创建服务和操作,但我真的没有运气找到这样做的方法。为了澄清起见,我所说的动态是指在应用程序启动期间从列表中创建命令,而不是即时创建它们。
有人可以阐明我的理解吗?
感谢您提供的任何帮助,
麦克
委托给多个内部服务的单一服务
我首先考虑是否使用使用 a liberal wildcard route 的单个服务实现来接受多种请求类型,然后根据某些参数委托给不同的服务实现,例如:
[Route("/services/{Type}/{PathInfo*})]
public class DynamicService
{
public string Type { get; set; }
public string PathInfo { get; set; }
}
public class DynamicServices : Service
{
public object Any(DynamicService request)
{
if (request.Type == "type1")
{
//Resolve existing Service and call with converted Request DTO
using (var service = base.ResolveService<Type1Service>())
{
return service.Any(request.ConvertTo<Type1Request>());
}
}
else if (request.Type == "type2") { ... }
}
}
动态生成和注册服务实现
不然可以看看ServiceStack's AutoQuery implementation for an example on how to generate and register dynamic services on the fly。 AutoQuery 查找实现 IQuery<>
接口的请求 DTO,然后生成并注册一个使用它的新服务实现。
它的工作方式基本上与定义的服务相同类,您可以使用代码生成来动态创建服务实现,而不是使用注册现有服务类型,然后可以将其注册到:
appHost.RegisterService(serviceType);
ServiceStack也支持dynamically registering attributes at runtime,例如:
requestDtoType
.AddAttributes(new RouteAttribute("/custom-route"))
.AddAttributes(new RestrictAttribute(RequestAttributes.Json));