Asp.net mvc 设置路线时可以使用Ninject吗?

Asp.net mvc 设置路线时可以使用Ninject吗?,asp.net-mvc,asp.net-mvc-routing,ninject,ninject.web.mvc,Asp.net Mvc,Asp.net Mvc Routing,Ninject,Ninject.web.mvc,我有一个使用Ninject的ASP.NET MVC5网站。该网站是一本在线杂志的网站 我想做的是设置一些路由,但是从注入的存储库中提取数据。所以,我希望有这样的路线 routes.MapRoute("Section9", "Section9_Ask-the-professional", new {controller = "Sections", action = "Detail", id = 9}); routes.MapRoute("Section10", "Section10_Confr

我有一个使用Ninject的ASP.NET MVC5网站。该网站是一本在线杂志的网站

我想做的是设置一些路由,但是从注入的存储库中提取数据。所以,我希望有这样的路线

routes.MapRoute("Section9", "Section9_Ask-the-professional",
  new {controller = "Sections", action = "Detail", id = 9});
routes.MapRoute("Section10", "Section10_Confrontation",
  new {controller = "Sections", action = "Detail", id = 10});
…其中节ID(上面示例中的9和10)和节名称从存储库中提取

我可以访问RouteConfig.RegisterRoutes()中的注入存储库吗?我试着添加常用的代码

[Inject]
public SectionsRepository<Section> Repository { get; set; }
[注入]
公共部分存储库{get;set;}
…但这不起作用,因为存储库总是空的。我试着让它静止,但没有乐趣


有人有什么想法吗?我花了相当多的时间搜索,但没有找到任何东西,主要是因为路由或注入的结果通常会产生噪音。

如果我没弄错,您希望能够访问存储库,为URL分配文章名称。这是可以做到的,但首先,想想你刚才在这里写的:

[Inject]
public SectionsRepository<Section> Repository { get; set; }
将一行代码放入RouteConfig类中,只要您觉得它有意义,例如作为默认赋值,或者放入RegisterRoutes(…)方法中,如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    IDependencyResolver rs = DependencyResolver.Current;

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new String[] { "MVCWebshop.WebUI.Controllers" }
        );
    }
}
public class MvcApplication : System.Web.HttpApplication
{
    protected IDependencyResolver dependencyResolver;

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        dependencyResolver = new NinjectDependencyResolver();

        DependencyResolver.SetResolver(dependencyResolver);

        ...
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        ...
    }
}
要在这里访问DI实现,显然必须在调用
RouteConfig.RegisterRoutes(RouteTable.Routes)之前设置解析器在Global.asax文件中,如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    IDependencyResolver rs = DependencyResolver.Current;

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new String[] { "MVCWebshop.WebUI.Controllers" }
        );
    }
}
public class MvcApplication : System.Web.HttpApplication
{
    protected IDependencyResolver dependencyResolver;

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        dependencyResolver = new NinjectDependencyResolver();

        DependencyResolver.SetResolver(dependencyResolver);

        ...
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        ...
    }
}

希望这能有所帮助。

谢谢。发布之后,我意识到Ninject不会实例化RouteConfig,但我不确定如何从那里开始。你的回答解决了那一点!