我正在尝试使用少量控制器创建一个.Net库,我想在多个Web项目中重用它们。
我已经走了一半,但问题是,每当我将库添加到新的Web项目时,我需要将所有相应的视图文件分别复制到新项目中。每当我更新库时,我都需要重复这些步骤。
有什么办法,我可以将dll中的View文件作为资源嵌入,并将其作为嵌入式资源传递给“View()”函数。
我想要实现的是,我想将控制器和相应的视图放在单个dll文件中,这样我就可以轻松地将库作为单个dll文件分发/管理
(Oneway我已经发现,正在使用IView接口创建自定义视图类并通过写入HTML Output Writer直接渲染输出,但我更喜欢使用View文件。)
答案 0 :(得分:7)
快速浏览一下代码,我认为魔术酱将实现VirtualPathProviderViewEngine(例如参见“RubyViewEngine”类)并将ViewEngine插入ViewEngines.Engines Collection(参见Global.asax.cs)。
答案 1 :(得分:2)
您可以使用VirtualPathProvider进行此操作。
答案 2 :(得分:0)
WebFormView类型最终调用BuildManager.CreateInstanceFromVirtualPath。 BuildManager中没有重载或其他函数来从流而不是从虚拟路径获取输入。因此,如果您不想自己实现IView,则需要将文件实际解压缩到磁盘,以便它们可以由BuildManager编译。您仍然可以将DLL作为单个文件分发,但需要生成aspx文件,以便BuildManager编译它们。有关详细信息,请参阅BuildManager help。
答案 3 :(得分:0)
使用CodePlex上的VB.NET XML Literals项目查看ASP.NET MVC视图引擎http://vbmvc.codeplex.com
这是一个自定义视图引擎,最初由Dmitry Robsman构思,他是Microsoft的ASP.NET PUM。每个视图都是一个VB.NET类,命名空间(而不是文件路径)用于将视图连接到控制器。将ASPX视图文件的内容复制到这些VB类中的XML文字中是相当简单的。作为类,它们被编译到程序集中而不需要任何额外的努力。
如果您的控制器是C#,那么很可能您最终会得到2个DLL,但Scott Hanselman有一篇关于让C#和VB在同一个程序集中共存的博客文章。 http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx
答案 4 :(得分:0)
请一想到codeplex并查看Managed Extensibility Framework
一旦你完成了......
查看Maarten Balliauw对ASP.NET MVC and the Managed Extensibility Framework (MEF)
的评论