ServiceStack Razor文件位于单独的项目中

时间:2015-05-22 13:47:59

标签: architecture servicestack servicestack-razor

我有一个解决方案,包括ServiceStack后端,常规设置(AppHost,ServiceInterface和ServiceModel),以及winforms应用程序和消费服务的iOS应用程序。

现在我想建立一个网络管理员,并且正在寻找有关如何构建此的建议。我想将apphost项目保持为小SS docs say

  

理想情况下,根级AppHost项目应保持轻量级   实现的自由。

所以我想将web-admin放在一个单独的项目中,包含所有.cshtml和内容等等。

这可能吗?不建议?有任何想法吗?

我能想到的一些替代方案是

  • 单页面应用,让少数cshtml文件存在于AppHost项目中。这值得学习吗?
  • 让单独的项目调用Web服务。考虑到他们住在同一个网络服务器上,这不是非常无效吗?或者它应该被认为是一种优势,因为它会使一切松散耦合?

2 个答案:

答案 0 :(得分:1)

查看有关使用Compiled Razor ViewsServiceStack.Gap GitHub存储库的文档,了解如何创建利用编译剃刀视图的嵌入式ServiceStack解决方案。

答案 1 :(得分:1)

我想为初学者提供更完整的答案:

  1. 网站的项目必须启用剃刀。例如,它必须引用ServiceStack.Razor,因此.cshtml将编译。

  2. 正如@mythz所指出的那样,添加ServiceStack.Razor.BuildTask来预编译剃刀文件。这是将LoadFromAssemblies参数

  3. 包含在内所必需的
  4. 在主AppHost中,指定在LoadFromAssemblies的其他程序集中找到Razor文件,例如:

        this.Plugins.Add(new RazorFormat { LoadFromAssemblies = { typeof(ActivityServer.Admin.AdminServices).Assembly } });
    
  5. 到目前为止,所有关于Razor .cshtml文件的内容都是如此。还包括服务,例如对于更复杂的视图,只需将其添加到AppHost() : base(...),或者如果您想要这些服务的前缀,请使用AppHost.RegisterService。

  6. 有一点需要指出的是,外部DLL中的Razor文件没有单独的命名空间,因此" hello.cshtml"在外部DLL中与主AppHost中具有相同名称的文件冲突。通过将所有cshtml文件(在外部dll中)放在子文件夹下,这将有所帮助,因为该文件夹将成为URL的一部分。