gpt4 book ai didi

c# - 从列表元素创建对象

转载 作者:行者123 更新时间:2023-11-30 20:49:42 25 4
gpt4 key购买 nike

很抱歉标题可能没有提供足够的信息,但我不知道如何解释我想在问题中做的事情。

所以,我有一个 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 });
}

忽略那边的 managers 键。

到目前为止一切顺利,但我的问题是这个。
我的RouteModel有一个 Constraints返回 List<ConstraintModel> 的属性具有该路由的所有配置约束。
ConstraintModel只有两个属性,NameValue .

如您所知,MapRoute方法需要额外的 object参数是约束,这个对象是这样构造的:

new { constraint1 = value1, constraint2 = value2, .. }

我怎样才能把我的 List<ConstraintModel>变成那样的东西?

非常感谢您花时间阅读我的问题,在此先感谢您

最佳答案

如果您查看 RouteCollection 类的方法,您会注意到有一个 Add 方法 ( MSDN article here)。

你能做的就是调用它(这就是 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);

关于c# - 从列表元素创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com