2012-03-19 6 views
0

데이터베이스에 대해 확인하는 제약 조건을 작성하려고합니다. 그리고 Ninject를 사용하고 있습니다 만, 어떤 이유로 저장소가 실행될 때 저장소의 새 인스턴스를 만들지 않습니다. 저장소에 대한 Ninject에 사용Ninject 및 dbcontext를 사용하는 Routeconstraint

public class LanguageRouteConstraint : IRouteConstraint 
{ 
#region IRouteConstraint Members 

private readonly IContentRepository _contentRepository; 

public LanguageRouteConstraint(IContentRepository contentRepository) 
{ 
    this._contentRepository = contentRepository; 
} 

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
{ 
if (routeDirection == RouteDirection.IncomingRequest) 
{ 
    string languageID = values["languageID"].ToString(); 

    if (String.IsNullOrEmpty(languageID)) 
    return false; 

    MyProj.MVC.Models.Language language = _contentRepository.GetLanguage(languageID); 

    return (language != null); 
    } 
    return false; 
    }  
#endregion 
} 

컨트롤러 작동

global.asax.cs

// Content 
routes.MapRoute(
     "Content Language Route", 
     "{languageID}/List", 
      new { controller = "Content", action = "Index", 
      new { languageID = new LanguageRouteConstraint() }, 
      new string[] { "MyProj.MVC.Controllers" } 
     ); 
..... 
kernel.Bind<IContentRepository>().To<ContentRepository>(); 

제약은 있지만, 그것을 만들 수 있도록 내가 gobal ASA의 경로를 수정해야 할 작업?

답변

0

은 다음과 같이 그것을 해결 :

// Content 
routes.MapRoute("Content Language Route", 
     "{languageID}/List", 
     new { controller = "Content", action = "Index", 
     new 
     { 
     languageID = new LanguageRouteConstraint(
      DependencyResolver.Current.GetService<IContentRepository>()) 
     }, 
    new string[] { "MyProj.MVC.Controllers" } 
);