可插拔服务组件。如何在AppHost构造函数中添加没有硬编码tem的程序集列表

时间:2013-02-06 14:39:55

标签: servicestack

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

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

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

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

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

提前谢谢

1 个答案:

答案 0 :(得分: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();