2015-06-21 59 views
1

我有一个使用Ninject的ASP.NET MVC5网站。该网站是一个在线杂志。我可以在设置路线时使用Ninject吗?

我想要做的是设置一些路线,但从注入的资源库中提取数据。所以,我想有这样的路线......

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; } 

...但这不起作用,因为存储库始终为空。我试图让它静止,但没有喜悦。

任何任何想法?我花了相当多的时间搜索,但没有找到任何东西,主要是由于关于路由或注入的结果的噪音。

回答

1

如果我找到你的话,你想有权访问你的仓库,为你的网址指定文章名称。这是可以做到的,但首先,想想你刚刚在这里写下:

[Inject] 
public SectionsRepository<Section> Repository { get; set; } 

[Inject]属性告知该属性装饰的财产应由Ninject值分配给该框架。你用Ninject实例化你的RouteConfig类吗?不,你不这样做(特别是因为RegisterRoutes(...)是静态的,因此无论如何都无法访问实例级别的数据),因此您不必配置Ninject对其执行任何操作。所以你的财产显然是空的,因为Ninject不会触及你的RouteConfig类。

解决办法: 添加此

IDependencyResolver rs = DependencyResolver.Current; 

行代码放到你的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" } 
     ); 
    } 
} 

到这里访问您的DI实现,你显然需要设置您的解析器呼吁在Global.asax文件RouteConfig.RegisterRoutes(RouteTable.Routes);,这样才:

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); 
     ... 
    } 
} 

希望这会有所帮助。

+0

谢谢你。发布后我意识到RouteConfig不会被Ninject实例化,但不知道如何从那里去。你的答案解决了这一点! –

相关问题