相关疑难解决方法(0)

外部组件中的控制器上的404

我在Asp.Net MVC 4项目中解决404响应时遇到问题.它内置于VS2012,目标4.5.

我有预编译的视图和控制器内置到独立的DLL中.我能够动态加载DLL并从我的核心项目中检查它们,甚至调用它们的方法; 但是,似乎MVC框架并不知道控制器.我在附近,但有些东西不见了.

控制器和视图的背景

控制器构建在独立的MVC项目中并继承自Controller.没有什么太有趣了.视图使用RazorGenerator并成为项目中的类.

项目的输出是一个DLL,它正确包含控制器和视图.

这些DLL IPlugin在库中的一个单独的类(不是控制器的一部分)中实现一个特定的接口,我们称之为它.

加载DLL

在Visual Studio中以管理员身份运行我编译我的应用程序,该应用程序在IIS下托管.随着项目的建立,我将插件DLL放入我的"插件"目录.没有调试(这在以后变得很重要),我打开IE并导航到该站点. 请注意,此时App已构建,但从未运行,因此将启动启动事件.如果我回收应用程序池,这里的一切仍然是一致的.

我有Startup两种方法类,PreStartPostStart使用调用方法WebActivator.PreApplicationStartMethodWebActivator.PostApplicationStartMethod分别.

PreStart 我在哪里做以下事情:

  • 获取我的"插件"目录中的所有插件DLL的列表
  • 将所有插件复制到 AppDomain.CurrentDomain.DynamicDirectory
  • 加载类型...如果它包含IPlugin我那么
    • 将程序集添加到BuildManager
    • 调用实现IPlugin的类的一些方法

在'PostStart'中我做了一些代码(基于RazorGenerator.Mvc的代码):

foreach (var assembly in Modules.Select(m=>m.Value))
{
    var engine = new PrecompiledMvcEngine(assembly)
    {
        UsePhysicalViewsIfNewer = HttpContext.Current.Request.IsLocal
    };

    ViewEngines.Engines.Insert(0, engine);
    VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
}
Run Code Online (Sandbox Code Playgroud)

Modules在此上下文中是键/值对,其中值是加载的程序集.此代码的目的是通过为知道如何解析视图的每个程序集添加视图引擎来确保MVC知道视图(这是RazorGenerator的一部分).

我怎么知道我很接近(但显然缺乏雪茄)

IPlugin定义一个名为RegisterRouteswhere 的方法,你猜对了,为那些实现接口的人注册了路由.我调用此方法PreStart并添加路由 - 我已经验证了这些存在于我的路由表中.例如,在我的插件中定义的路由,通过在此期间动态调用方法创建的路径PreStart,我在检查路由时看到类似这样的DataToken:

Namespaces = Plugin.Name.Controllers
Run Code Online (Sandbox Code Playgroud)

因此,路由已注册,程序集已加载,我已验证DLL已正确复制到AppDomain的DynamicDirectory.我可以调用在运行时动态加载的类的成员.但是当我导航到路线匹配的URL时,我得到了404.这不是 …

.net asp.net-mvc assemblies asp.net-mvc-4

13
推荐指数
1
解决办法
2883
查看次数

ASP.NET MVC 4.0控制器和MEF,如何将这两者结合在一起?

我正在尝试使用MEF创建ASP.NET MVC模块.虽然到目前为止我没有使用没有MVC的MEF没有问题,但是当涉及到导出控制器时我遇到了一些困难.

我使用这种方法作为示例http://kennytordeur.blogspot.de/2012/08/mef-in-aspnet-mvc-4-and-webapi.html 我通过引入包含控制器的外部dll使其变得更加复杂.但是如果我遵循Kenny的想法,那么我需要有一个通用的接口(比如他的例子中的IMyTest),但是,因为我打算拥有一些控制器,这意味着我需要太多的接口.最后,看起来我重用了控制器的内部方法,而不是整个控制器.

我在这里找到了一个问题如何将MEF与ASP.NET MVC 4和ASP.NET Web API集成,其中包含一些代码示例,其中我看到了类似的图片 - 导入了接口IContactRepository的_contactRepository,然后在视图中重用.

这就是为什么我的问题是,导出整个控制器,不使用接口是正常的吗?怎么这样?

我发现MEF和ASP.NET之间的联系相当令人困惑,起初它认为互联网上有很多例子,但是当我看起来更深层次时,它们中的大多数都已经过时,不实用或太原始,无法看到它如何能够适用于更大的项目.

谢谢!

c# asp.net-mvc mef

7
推荐指数
1
解决办法
5521
查看次数

模块化/插件框架在ASP.Net MVC 5中

我想使用ASP.Net MVC5创建一个Web应用程序.它是一个大型企业应用程序,拥有大量模块,之前我曾在Siverlight上工作并使用Prism架构.

我已经谷歌这个并发现了很多帖子,但大部分都至少有1年了,所以只是想知道是否有新的东西推出,这有助于我实现插件框架.

asp.net-mvc mef

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

asp.net-mvc ×3

mef ×2

.net ×1

asp.net-mvc-4 ×1

assemblies ×1

c# ×1