我有一个使用MEF的复合ASP .NET MVC 3 Razor应用程序.如果我要Views在应用程序的常规文件夹下部署插件作为DLL文件和视图(CSHTML),一切都会好起来的.但这不是很干净,如果我不将视图作为嵌入式资源放在DLL文件中(以及控制器和模型),它将不是真正的插件.
我跟着很多文章(其中大部分都已过时).事实上,Stack Overflow上有一个非常好的:类库中的控制器和视图
我还检查了文档VirtualPathProvider,我已经能够构建一个自定义文件,在程序集中找到该文件并完美加载它(或至少获取它的流).为此,我遵循了VirtualPathProvider MSDN上的文档.
VirtualFile还有一个实现,但VirtualDirectory尚未实现.
这是问题所在.我正在使用Razor的观点.我知道他们需要web.configRazor文件中的配置规范来构建它们.但是如果我将它们嵌入到DLL中,那么这个配置就会丢失.
我想知道这是不是我继续得到错误的原因:
'〜/ Plugins/CRM.Web.Views.CRM.Index.cshtml'中的视图必须从WebViewPage或WebViewPage派生.
也许我只需要添加一些代码来使它工作?有任何想法吗?
asp.net-mvc virtualpathprovider embedded-resource razor asp.net-mvc-3
背景:
我们有一个包含许多模块的项目.我们将EntityFramework 4.2与FluentAPI(CodeFirst)一起使用.
有一个名为Diverto.ORM.EntityFramework.SQLServer的中心项目,它包含使用FluentAPI构建上下文的部分类(并且它引用了解决方案中的所有其他项目).
最近我们收到了客户要求实施许多其他功能的请求,该解决方案还需要其他几个项目.其中一些项目将来自另一个系统(人力资源),一些将被创建.现有解决方案的核心是财务系统.
我们希望使用MEF"动态"启用和禁用这些新项目(以及GUI,业务逻辑和所有项目).它们将作为插件进行交互,应用程序的主菜单也将使用MEF进行填充.
但是,由于它们必须共享的数据,我们并不真正了解如何启用/禁用这些模块/项目(新模块/项目).
考虑一下:
- 使用DbSet <ClassA>和DbSet <ClassB>的DivertoContext(主上下文).
- 使用DbSet <ClassC>的PluginContext(来自插件).
现在,考虑到在GUI内部,我必须能够访问ClassA,ClassB和ClassC中的数据(如果插件存在的话).
找到解决方案 见下文
我注意到有人在检查这个并将其标记为最喜欢或最喜欢的.请记住,这个答案可以追溯到2012年,EntityFramework 自那以后发生了很大的变化.
另外,拜托,请,请记住,每个项目都有自己的需求.那时候,我需要这个功能.您的项目可能根本不需要这个,或者只是其中的一部分!
最后,只是为了确保一切都被掩盖,是的,可以使用EF 6.1和EF迁移来实现这一点,也可以使用其他ORM和迁移框架.
您可能需要一些其他接口,作为迁移加载的接口,并正确处理特定的插件迁移(不要将其与其他插件混合使用,因此请尝试为每个插件实现某种独特的令牌).