gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:12:26 24 4
gpt4 key购买 nike

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

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

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

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

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

先感谢您

最佳答案

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();

关于servicestack - 可插拔服务程序集。如何在 AppHost 构造函数中添加没有硬编码项的程序集列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731669/

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