自定义依赖关系解析器会降低我的MVC应用程序吗?

iAt*_*_it 3 c# asp.net-mvc dependency-injection ninject

不会为asp.net MVC 4使用自定义依赖项解析器显着减慢应用程序?考虑到它被调用每个单独的依赖,而不仅仅是我需要它被调用(下面)

有没有办法让GetService(Type serviceType)我有一个ninject可以解析的接口,而不是asp.net为每个单独的依赖项调用GetService,如下所示,以使其更快?我正在使用Ninject,这不是最快的开始.

或者这是我不应该担心的事情?谢谢

public class NinjectDependencyResolver : IDependencyResolver
..... unnecessary code not shown

public object GetService(Type serviceType)
{
    Debug.WriteLine("GetService was called for " + serviceType.ToString());
    return kernel.TryGet(serviceType);
}
Run Code Online (Sandbox Code Playgroud)

输出窗口正在显示

GetService was called for System.Web.Mvc.ITempDataProvider
GetService was called for System.Web.Mvc.Async.IAsyncActionInvoker
GetService was called for System.Web.Mvc.IActionInvoker
GetService was called for System.Web.Mvc.IViewPageActivator
GetService was called for ASP._Page_Views_Home_Index_cshtml ... GOES ON and ON....
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 6

可能不应该担心它.

如果你的ASP.NET MVC站点就像一个普通站点,并且有进程外调用,比如

  • 访问数据库
  • 调用Web服务
  • 访问文件系统
  • 等等

那么页面请求时间的大部分(95%以上)将在那里使用.

一般来说,像NInject这样的DI容器很快; 它们是可重用的库,它们的创建者通常会尽可能快地制作它们.事实上,他们没有做任何MVC的内部DependencyResolver尚未做的事情.

有关此主题的更多信息,请阅读我的(与容器无关的)文章充满信心地构建对象图,或者查看我的演讲Big Object Graphs Up Front.

你还应该记住Knuth的话,过早的优化是所有邪恶的根源.如果你担心的话:衡量.

这就是我在Big Object Graphs Up Front中所做的,以及我所报告的内容.