- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人知道如何在使用 Ninject 进行 DI 的 mvc 应用程序中使用 AsyncController 吗?
当我不使用 ninject 时,AsyncController 工作正常,但我无法让它们一起工作。
我在我的站点模块中添加了以下内容,但没有成功。
Bind<IAsyncController>( ).To<AsyncController>( ).InSingletonScope( );
抱歉没有详细解释这一点。
我的 Controller 看起来像这样
[HandleError]
public class HomeController : AsyncController
{
public void IndexAsync( )
{
AsyncManager.OutstandingOperations.Increment( );
RssFeed feed = new RssFeed( );
feed.GetRssFeedAsyncCompleted += ( s, e ) =>
{
AsyncManager.Parameters[ "items" ] = e.Items;
AsyncManager.OutstandingOperations.Decrement( );
};
feed.GetRssFeedAsync( "http://feeds.abcnews.com/abcnews/topstories" );
}
public ActionResult IndexCompleted( IEnumerable<SyndicationItem> items )
{
ViewData[ "SyndicationItems" ] = items;
return View( );
}
}
我的 global.asax 看起来像这样
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start( )
{
AreaRegistration.RegisterAllAreas( );
RegisterRoutes( RouteTable.Routes );
}
}
这工作正常。但是当我使用 ninject (ninject 2.0) 时,当我尝试访问索引页面时,我会收到 404 页面未找到错误。这就是我配置 ninject 的方式
public class MvcApplication : NinjectHttpApplication //System.Web.HttpApplication
{
#region IOC
static IKernel container;
public static IKernel Container
{
get
{
if ( container == null ) { container = new StandardKernel( new SiteModule( ) ); }
return container;
}
}
protected override IKernel CreateKernel( )
{
return Container;
}
#endregion
public static void RegisterRoutes( RouteCollection routes )
{
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
//protected void Application_Start()
//{
// AreaRegistration.RegisterAllAreas();
// RegisterRoutes(RouteTable.Routes);
//}
protected override void OnApplicationStarted( )
{
AreaRegistration.RegisterAllAreas( );
RegisterRoutes( RouteTable.Routes );
}
}
public class SiteModule : NinjectModule
{
public override void Load( )
{
}
}
我需要在我的站点模块上绑定(bind)任何东西吗?
顺便说一句,我正在使用 Jeff Prosise 在他的博客中发布的示例 Here 您可以下载他的演示应用程序并尝试 Ninject-ify :)
感谢任何帮助。
最佳答案
它似乎不起作用,因为标准 NinjectControllerFactory 将 NinjectActionInvoker 插入到 Controller 的 ActionInvoker 属性中。 NinjectActionInvoker 派生自ControllerActionInvoker
。然而,AsyncController 使用从 AsyncControllerActionInvoker
派生的 ActionInvoker。由于某种原因,这会导致 Controller 与路由不匹配,并返回 404。
真正的解决方案是对 Ninject 进行修补,以支持使用 AsyncControllerActionInvokers 构建 AsyncController。
但是,与此同时,这里有一个解决方法:
在您的 Global.asax 中,添加此覆盖:
protected override Ninject.Web.Mvc.NinjectControllerFactory CreateControllerFactory()
{
return new MyNinjectControllerFactory( kernel );
}
然后为 MyNinjectControllerFactory 添加此类:
public class MyNinjectControllerFactory : Ninject.Web.Mvc.NinjectControllerFactory
{
public MyNinjectControllerFactory( IKernel kernel ) : base( kernel ) { }
protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType )
{
if ( controllerType == null )
{
// let the base handle 404 errors with proper culture information
return base.GetControllerInstance( requestContext, controllerType );
}
var controller = Kernel.TryGet( controllerType ) as IController;
if ( controller == null )
return base.GetControllerInstance( requestContext, controllerType );
//var standardController = controller as Controller;
//if ( standardController != null )
// standardController.ActionInvoker = CreateActionInvoker();
return controller;
}
}
这是 NinjectControllerFactory 的副本,省略了 ActionInvoker 的分配。
如果您的代码依赖于注入(inject)到 ActionFilters 中的依赖项,则需要创建自己的 ActionInvoker,该 ActionInvoker 返回使用 Ninject 的 AsyncControllerActionInvoker。查看 NinjectActionInvoker 的 Ninject.Web.Mvc 源代码。
关于asp.net-mvc - 如何使用 Ninject for DI 在 MVC 应用程序中使用 AsyncController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823899/
我最近对我的一个 ASP.NET MVC3 Controller 做了一些(相当微不足道的)更改,并将其中一个操作更改为异步操作。基本上我采用了如下代码: public ActionResult My
我是 AsyncController 的新手,请帮助我为什么我无法使用异步从数据库中获取数据: public async Task Index() { Task> objctry = T
在实现 ASP.NET MVC AsyncController 时,xxxCompleted 方法必须是 Public。我想知道这是否意味着可以直接调用 xxxCompleted 方法,或者是否使用
我正在研究 Playframework 概念,我一直坚持使用 AsyncController 示例,该示例说明了以下描述: This controller contains an action tha
我想使用 jQuery ajaxForm 将数据发布到 AsyncController 以触发某些任务。我希望用户能够在此任务完成时继续浏览其他页面。然后我想使用类似 jGrowl 显示状态消息任务完
我需要获取 asp.net MVC 的请求处理时间。我使用 IHttpModule 订阅 onBeginRequest 和 onEndRequest 事件。对于同步 Controller ,它工作得很
我们在 Beta HyperV 环境中的 MVC AsyncController 上收到 TimeoutException。在本地调试时一切正常,但是当我们部署到预生产环境时,我们得到这个错误: [T
我尝试将 id 参数与异步 iactionresult 方法一起使用,但它显示为 null。 如果我从 Controller 继承并使用 - public IActionResult Index(st
我在 ASP.net MVC 中尝试使用异步 Controller 只是为了看看它们是如何工作的。在我的一个异步操作方法中,我想通过循环几次并执行 Thread.Sleep 来模拟长时间运行的方法:
我刚刚在 asp.net mvc 2 中将我的 Controller 转换为 asyncController。(即:将操作方法 About 拆分为 AboutAsync 和 AboutComple
标题很清楚。我现在有一个继承自“Controller”类的 application-BaseController。 对于新的 .NET Framework 4.5 和 ASP.NET MVC 4,我想
AsyncController究竟是怎么做的?避免使用 ASP.NET 工作线程?如果我使用基于事件的模式(伪代码): [AsyncTimeout(60000)] public void WaitFo
我正在尝试将 Controller 中的某些操作转换为在使用 ninject 进行依赖项注入(inject)的 mvc 项目中异步运行。我按照以下步骤继承 AsyncController 并将与“X”
我们计划使用 AsyncController,因为我们的大多数请求将是长时间运行的 I/O 绑定(bind)请求。计划将此处理卸载到 CLR 线程,以便保持最大数量的 IIS 线程空闲来服务新的传入请
我们计划使用 AsyncController,因为我们的大多数请求将是长时间运行的 I/O 绑定(bind)请求。计划将此处理卸载到 CLR 线程,以便保持最大数量的 IIS 线程空闲来服务新的传入请
我有 public class FileController : AsyncController { public ActionResult Download(FormCollection for
我正在使用 AsyncController say 'AbstractAbcContoller' public class AbstractAbcContoller : AsyncController
我正在尝试将此方法 ExportTo3rdParty() 转换为使用 AsyncController: public JsonResult SaveSalesInvoice(SalesInvoice
我正在尝试学习如何在 MVC2 中使用 AsyncController,但那里的文档/教程很少。我希望采用一种普通的 Controller 方法,该方法导出到第 3 方服务的速度非常慢,并将其转换为异
今天,我想在 MVC3 Web 角色的 AsyncController 中模拟等待长时间运行的阻塞进程(5 到 30 秒)。然而,一开始,我只用了 1 秒钟,让事情顺利进行。是的,这样做是否明智值得怀
我是一名优秀的程序员,十分优秀!