servicestack,C#,Asp.net Mvc,Sitecore,servicestack" /> servicestack,C#,Asp.net Mvc,Sitecore,servicestack" />

C# 我可以在Sitecore共享环境中运行的两个不同的.NET MVC站点中使用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安装中所有应用程序的所有文件都位

我们正在向将应用程序部署到多站点/租户Sitecore安装的客户端交付一个使用Sitecore构建的ASP.NET MVC应用程序

我们在大多数项目中都大量使用ServiceStack,但现在遇到了一个问题。Sitecore设置中的另一个应用程序也在使用ServiceStack。这会导致以下错误:

[InvalidDataException: AppHostBase.Instance has already been set]
这非常有意义,因为Sitecore安装中所有应用程序的所有文件都位于磁盘上的同一物理文件夹中。这意味着我们共享DLL和所有东西

所以另一个项目在我们之前初始化,当我们尝试注册我们的服务时,我们得到了上面的错误

我有办法解决这个问题吗?我是否可以在现有的
AppHostBase.Instance
上注册我的服务

有两件事可能值得注意:

  • 我们对Sitecore环境的设置没有任何影响

  • 如果必须在两个项目中都做一些事情,我们可以使用ServiceStack与其他团队一起工作


  • 最好告诉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快得多。