gpt4 book ai didi

c# - ServiceStack:解析未知类型的服务

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:58 25 4
gpt4 key购买 nike

我有以下情况:我的服务需要处理不同类型的任务,每个任务都有自己的服务类。应该有一个 REST 路径/tasks/(GenericTasksService) 来访问所有这些,以及其他特定路径,如/tasks/specifictask/。

public class Task
{
public string taskId { get;}
}

public class SpecificTask : Task
{
public string specificProperty { get; set; }
}

我的想法是像这样向 GenericTasksService 注册特定服务:

public class GenericTasksService : Service
{
private static List<ITaskService> taskServices = new List<ITaskService>();

public static void RegisterTaskService(ITaskService ts) { this.taskServices.Add(ts);}

public List<Task> Get(GetAllTasks gat)
{
List<Task> tasks = new List<Task>();

foreach(ITaskService ts in this.taskServices)
tasks.Add(ts.GetAllTasks());

return tasks;
}
}

public class SpecificTaskService : ITaskService
{
//from ITaskService
List<Task> GetAllTasks()
{
//access Repository and return the List
}

//SpecificTask-implementation would follow here
}

然后我想通过调用在 AppHost.Configure 中注册我的服务

GenericTasksService.RegisterTaskService(new SpecificTaskService());

这个问题是afaik,请求上下文不是由ServiceStack设置的,所以我无权访问 session 。 (它是空的)

另一种选择是在 GenericTaskService 中使用 ResolveService ,但我不知 Prop 体类型的情况下该怎么做。

在 AppHostBase.Configure 中注册我的任务服务时,我也尝试使用 AppHostBase.ResolveService (HttpContext httpcx),但那时我不知道从哪里获取 RequestContext。

这是我在 stackoverflow 上的第一篇文章,希望我没有忽略一些约定。 ;)提前感谢您的帮助或建议。

史蒂芬

最佳答案

我通过注册类型而不是这样的实例来帮助自己:

public static void RegisterTaskServiceType(System.Type t)
{
Type iface = t.GetInterface("itaskservice",true);

if (iface == null)
throw new ArgumentException("Type-Argument needs to implement ITaskService.");
else if (taskServiceTypes.Contains(t))
throw new InvalidOperationException(string.Format("Type {0} is already registered.",t.FullName));
else
taskServiceTypes.Add(t);
}

在我的任何 Get-Methods 中,我现在通过使用反射调用 ResolveService 方法来解析服务(如果尚未完成)。

private void ResolveTaskServices()
{
if (!servicesResolved)
{
foreach (Type t in taskServiceTypes)
{
//Resolve Service via Reflection and add it to the List of Services
MethodInfo MethodObj = typeof(TasksService).GetMethod("ResolveService");
MethodInfo GenericMethodObj = MethodObj.MakeGenericMethod(t);
taskServices.Add((ITaskService)GenericMethodObj.Invoke(this, new object[] { }));
}

servicesResolved = true;
}
}

我需要再执行一些检查(Type 还需要执行 ServiceStack.ServiceInterface.Service),但至少它可以工作。

关于c# - ServiceStack:解析未知类型的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com