Хотя подход, предложенный @Darin, работает, введенные зависимости должны сохраняться в течение всего срока службы приложения.Если область зависимости находится, например, в области запроса, то она будет работать для первого запроса, а не для каждого запроса после этого.
Вы можете обойти это, используя очень простую оболочку DI для вашегоограничения маршрута.
public class InjectedRouteConstraint<T> : IRouteConstraint where T : IRouteConstraint
{
private IDependencyResolver _dependencyResolver { get; set; }
public InjectedRouteConstraint(IDependencyResolver dependencyResolver)
{
_dependencyResolver = dependencyResolver;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return _dependencyResolver.GetService<T>().Match(httpContext, route, parameterName, values, routeDirection);
}
}
затем создайте свои маршруты следующим образом
var _dependencyResolver = DependencyResolver.Current; //Get this from private variable that you can override when unit testing
routes.MapRoute(
"Countries",
"countries/{country}",
new {
controller = "Countries",
action = "Index"
},
new {
country = new InjectedRouteConstraint<CountryRouteConstraint>(_dependencyResolver);
}
);
РЕДАКТИРОВАТЬ: попытался сделать его тестируемым.