我正在嘗試創建一個簡單的引導程序。我boostrapper代碼如下所示:使用Ninject和DependencyResolver在ASP.NET MVC 3中創建引導程序
public static void Run()
{
var tasks = DependencyResolver.Current.GetServices<IBootstrapperTask>();
foreach (var task in tasks)
{
task.Execute();
}
}
的IBootstrapperTask界面看起來像:
public interface IBootstrapperTask
{
void Execute();
}
我的第一次嘗試是通過引導程序註冊路線:
public class RegisterRoutes : IBootstrapperTask
{
private readonly RouteCollection routes;
public RegisterRoutes(RouteCollection routes)
{
this.routes = routes;
}
public RegisterRoutes() : this(RouteTable.Routes)
{
}
public void Execute()
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
}
我的長相的Global.asax如:
protected void Application_Start()
{
DependencyResolver.SetResolver(new NinjectDependencyResolver());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
Bootstrapper.Run();
}
而且我NinjectDependencyResolver樣子:
kernel.Bind<IBootstrapperTask>().To<RegisterRoutes>();
然而,當我嘗試運行這段代碼,我得到以下異常:
錯誤激活的VirtualPathProvider 沒有匹配的綁定是可用的,並且類型不可自行綁定。
激活路徑:
3)依賴性的VirtualPathProvider注射入型RouteCollection的構造的參數的VirtualPathProvider
2)依賴性RouteCollection注射入型的RegisterRoutes
1)請求的構造方法的參數的路由對於IBootstrapperTask
任何幫助將不勝感激。
編輯
這是需要我的例子來工作缺少約束力是:
kernel.Bind<RouteCollection>().ToConstant(RouteTable.Routes);
這種結合,如果你使用Ninject MVC擴展,因爲它已經有了這種結合不會被要求和其他一些開箱即用的答案。
雷莫,你能解釋爲什麼使用擴展將解決我的問題?是否因爲已經爲我建立了某些綁定(如本例中的VirtualPathProvider)?更重要的是,如果我選擇不使用擴展名,那麼什麼樣的綁定可以解決我上面的問題?感謝您的幫助。 – Thomas 2011-03-31 21:15:10
它增加了nesessary綁定。 對不起,不分析你必須添加什麼來修復你自己的實現。我根本沒有時間去支持所有的自定義實現。支持一種實現已經花了很多時間。我沒有看到與定製的一個點。 – 2011-04-01 14:59:47