从列表元素创建对象
本文关键字:创建对象 列表元素 | 更新日期: 2023-09-27 17:59:46
很抱歉,标题可能信息不足,但我不知道如何解释我想在问题中做什么。
因此,我有一个MVC应用程序,我正在从Web.config
中的配置部分加载路由。
为了从配置的元素中封装我需要的所有信息,我创建了一个RouteModel。
IEnumerable<RouteModel> configuredRoutes = RoutingFacade.GetAllRoutes();
foreach(RouteModel route in configuredRoutes)
{
routes.MapRoute(route.Name, route.Url,
new { controller = "Home", action = "Index", managers = route.Managers });
}
忽略那边的经理钥匙
到目前为止还不错,但我的问题是
我的RouteModel
有一个Constraints
属性,它返回一个带有该路由所有配置约束的List<ConstraintModel>
ConstraintModel
只有Name
和Value
两个性质。
正如您所知,MapRoute
方法需要一个额外的object
参数,这些参数是约束条件,该对象的构造如下:
new { constraint1 = value1, constraint2 = value2, .. }
我怎样才能把我的List<ConstraintModel>
变成那样?
我真的很感谢你花时间阅读我的问题,非常感谢你提前
如果查看RouteCollection
类的方法,您会注意到有一个Add
方法(MSDN文章)。
你能做的就是你可以调用它(这就是MapRoute
扩展方法最终所做的)并根据需要创建Route
类的实例。
Dictionary<string, object> constraints = new Dictionary<string, object>();
// populate your constraints into the constraints dictionary here..
Dictionary<string, object> dataTokens = new Dictionary<string, object>();
Dictionary<string, object> defaults = new Dictionary<string, object>();
Route route = new Route(" << url >> ", new MvcRouteHandler())
{
Constraints = new RouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary(),
Defaults = new RouteValueDictionary()
};
routes.Add(route);
这样,您就有机会为约束指定string
-object
对。
编辑
此外,如果您对如何使用此方法有任何疑问,但又熟悉MapRoute
扩展方法,我建议您使用ILSpy来分解定义MapRoute
(即System.Web.Mvc.dll
)的程序集,并逐步发现MapRoute
和RouteCollection.Add
之间的连接。
编辑2-关于路线名称
您也可以检查过载RouteCollection.Add(string name, RouteBase item)
。这是指定路由名称的一种方法。
所以基本上你可以去做这个:
routes.Add(" My route with dynamically loaded constraints ", route);