我正在尝试创建一个简单的引导程序。我的助推器代码如下所示:
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)RouteCollection类型的构造函数的参数virtualPathProvider中注入依赖VirtualPathProvider
2) 将依赖RouteCollection注入到RegisterRoutes类型的构造函数的参数路由中
1) 请求 IBootstrapperTask
任何帮助将不胜感激。
编辑
我的示例工作所需的缺失绑定是:
kernel.Bind<RouteCollection>().ToConstant(RouteTable.Routes);
如果您使用 Ninject MVC 扩展,则不需要此绑定,因为它已经具有此绑定以及其他一些开箱即用的绑定,如下面的答案所示。