2

我对如何使服务程序集可插入(从配置文件中读取它们)到 ServiceStack 有疑问。我想从配置文件中注册我的服务程序集,而不是AppHost像这样在构造函数中对它们进行硬编码:

public appHost() : base("My Pluggable Web Services", typeof(ServiceAssembly1).Assembly,  typeof(AnotherServiceAssembly).Assembly) { }

我找不到在此构造函数之外注册程序集的其他方法。构造函数也接受参数并且没有重载,例如IEnumerable<Assembly>作为参数。这个想法是能够在不触及服务堆栈 REST 网站的情况下插入服务程序集。

我查看了Plugin接口,但我认为它更适合用于扩展服务堆栈而不是动态插入服务程序集。

有没有办法在当前的服务堆栈版本中实现这种可插入的服务程序集功能?您还可以添加将接受程序集数组的构造函数重载吗?

先感谢您

4

1 回答 1

3

ServiceStack 的目的AppHost是成为为您的解决方案定制的定制类,该类具有对所有服务依赖项的硬引用。如果您在代码中声明依赖项而不是无类型配置,那么在构建时验证您的应用程序是否正确配置会容易得多。

话虽如此,您可以通过覆盖AppHostBase.CreateServiceManager()来覆盖 ServiceStack 用来发现服务类型的策略:

protected virtual ServiceManager CreateServiceManager(params Assembly[] assembliesWithServices)
{       
    return new ServiceManager(assembliesWithServices);
    //Alternative way to inject Container + Service Resolver strategy
    //return new ServiceManager(new Container(),
    //    new ServiceController(() => assembliesWithServices.ToList().SelectMany(x => x.GetTypes())));
}    

否则,您仍然可以通过将程序集传递到 AppHost 来做您想做的事情,例如:

var appHost = new AppHost("Service Name", MyConfig.LoadAssembliesFromConfig());
(new AppHost()).Init();
于 2013-02-06T16:44:21.243 回答