Nancy在单独的库中提供模块的视图

时间:2014-07-05 18:51:42

标签: c# asp.net razor nancy

我是Nancy的新手,我正在尝试在单独的项目中为每个模块/控制器设置一个webapp。主项目是空的ASP.NET项目,并使用Nancy.Hosting.Aspnet nuget包。

进行这种设置的优雅方式是什么?

说我有以下解决方案结构:

/ModuleA
- ModuleA.csproj
- IndexA.cshtml (Copy to Output Directory = Copy Always)

/MainModule (references ModuleA)
- MainModule.csproj
- Index.cshtml

目前要从IndexA投放ModuleA视图,我必须编写View["bin/IndexA"],这看起来非常难看,因为它还需要以相同方式添加javascript / css前缀。

1 个答案:

答案 0 :(得分:0)

您需要在引导程序中配置nancy约定。这是南希文档:https://github.com/NancyFx/Nancy/wiki/View-location-conventions

鉴于此解决方案结构:

/ModuleA
- ModuleA.csproj
- views/IndexA.cshtml (Copy to Output Directory = Copy Always)
- assets/foo.js (Copy to Output Directory = Copy Always)

/MainModule (references ModuleA)
- MainModule.csproj
- Index.cshtml

MainModule引导程序中:

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureConventions(Nancy.Conventions.NancyConventions nancyConventions)
    {
        base.ConfigureConventions(nancyConventions);

        // for views in referenced projects
        nancyConventions.ViewLocationConventions.Add(
            (viewName, model, context) => string.Concat("bin/views/", viewName));

        // for assets in referenced projects         
        nancyConventions.StaticContentsConventions.Add(
            Nancy.Conventions.StaticContentConventionBuilder.AddDirectory("assets", "bin/assets"));
    }
}

IndexA.cshtml

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="/assets/foo.js"></script>
    </head>
    <body></body>
</html>

如评论中@ eth0所述,您也可以将视图保存用作资源,但这超出了我的答案范围。这是一篇关于这个主题的好文章:http://colinmackay.scot/2013/05/02/configuring-the-nancy-to-use-views-in-a-separate-assembly/