C# 我可以在Sitecore共享环境中运行的两个不同的.NET MVC站点中使用ServiceStack吗?
我们正在向将应用程序部署到多站点/租户Sitecore安装的客户端交付一个使用Sitecore构建的ASP.NET MVC应用程序 我们在大多数项目中都大量使用ServiceStack,但现在遇到了一个问题。Sitecore设置中的另一个应用程序也在使用ServiceStack。这会导致以下错误:C# 我可以在Sitecore共享环境中运行的两个不同的.NET MVC站点中使用ServiceStack吗?,c#,asp.net-mvc,sitecore,
servicestack,C#,Asp.net Mvc,Sitecore,
servicestack,我们正在向将应用程序部署到多站点/租户Sitecore安装的客户端交付一个使用Sitecore构建的ASP.NET MVC应用程序 我们在大多数项目中都大量使用ServiceStack,但现在遇到了一个问题。Sitecore设置中的另一个应用程序也在使用ServiceStack。这会导致以下错误: [InvalidDataException: AppHostBase.Instance has already been set] 这非常有意义,因为Sitecore安装中所有应用程序的所有文件都位
[InvalidDataException: AppHostBase.Instance has already been set]
这非常有意义,因为Sitecore安装中所有应用程序的所有文件都位于磁盘上的同一物理文件夹中。这意味着我们共享DLL和所有东西
所以另一个项目在我们之前初始化,当我们尝试注册我们的服务时,我们得到了上面的错误
我有办法解决这个问题吗?我是否可以在现有的AppHostBase.Instance
上注册我的服务
有两件事可能值得注意:
最好告诉ServiceStack所有具有构造函数的程序集,例如:
public class AppHost : AppHostBase
{
//Tell ServiceStack the name of your app and which assemblies to scan for services
public AppHost() : base("Hello ServiceStack!",
typeof(ServicesFromDll1).Assembly,
typeof(ServicesFromDll2).Assembly
/*, etc */) {}
public override void Configure(Container container) {}
}
但您可以在ServiceStack之外通过以下方式动态注册服务:
HostContext.ServiceController.RegisterService(typeof(MyService));
或在程序集中向以下用户注册所有服务:
HostContext.ServiceController.
RegisterServicesInAssembly(typeof(MyService).Assembly);
将此标记为答案,因为它回答了问题。不幸的是,它没有解决我们的问题,因为我们在不同的配置中遇到了更多的问题。最后,我们估计在项目中用Web Api替换ServiceStack要比让两个应用程序无缝使用同一AppHostBase快得多。