我是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前缀。
答案 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/