我想将AttributeRouting与Orchard CMS一起使用。为此,我需要使用一个返回Orchard RouteDescriptor列表的方法实现一个IRouteProvider。
我需要一种方法来获得路由列表,这样我就可以这样做:
public IEnumerable<RouteDescriptor> GetRoutes()
{
return _routes ?? (_routes = MvcRouting.GetRoutes(GetType().Assembly).Select(route => new RouteDescriptor
{
...
}).ToArray());
}此方法来自MvcRouting,但我想使用功能更丰富的AttributeRouting,但找不到一种方法来扫描当前程序集的路由属性。我需要一种方法让AttributeRouting返回路由列表,我可以将其投影到RouteDescriptor列表中,但实际上并没有注册它们,将其留给Orchard。
public class RouteDescriptor {
public string Name { get; set; }
public int Priority { get; set; }
public System.Web.Routing.RouteBase Route { get; set; }
public System.Web.SessionState.SessionStateBehavior SessionState { get; set; }
}如果我想直接注册路由(在非果园项目中),我将使用以下AttributeRouting扩展方法:
routesCollection.MapAttributeRoutes(config =>
{
config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
}但这并不适合其他Orchard模块。所以需要采用上面的方法。
你能想到什么办法吗?
发布于 2013-03-21 21:06:33
正如Bertrand已经指出的,您需要的是对当前可用的Controller类型进行简单的反射。
IRouteProvider。Controller类型IExtensionManager _extensions;ShellBlueprint _shell;...var types = .LoadFeatures(_extensions.EnabledFeatures(_shell.Descriptor)) typeof(Controller).IsAssignableFrom(t)));
new RouteDescriptor{ ... }。https://stackoverflow.com/questions/15515863
复制相似问题