我有以下情况:我的服务需要处理不同类型的任务,每个任务都有自己的服务类。应该有一个 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设置的,所以我无权访问会话。(为空)
另一种选择可能是在 GenericTaskService 中使用 ResolveService<T>,但我不知道如何在不知道具体类型的情况下执行此操作。
在 AppHostBase.Configure 中注册我的 TaskServices 时,我还尝试使用 AppHostBase.ResolveService<T>(HttpContext httpcx),但那时我不知道从哪里获取 RequestContext。
这是我在 stackoverflow 上的第一篇文章,我希望我没有忽略一些约定。;) 提前感谢您的帮助或建议。
史蒂芬