nancyfx中的模块是否真的在每个请求中创建?

Sti*_*son 6 nancy

我在控制台项目中创建了一个简单的自托管Nancy站点,其中包含一个模块.在测试时,我注意到每个请求都会调用模块构造函数.这让我感到困惑,因为ctor也是路线注册的地方.这对我来说没有意义,我必须遗漏一些东西.那么在每个请求上调用的模块构造函数是否都是在每个请求上重新注册的所有路由?

Ste*_*ins 7

排序 - 南希将在启动时构建所有模块,注册所有路由并构建路由树.对于每个请求,它将确定它需要哪个模块并使用请求容器构造它,因此请求范围的依赖关系具有正确的生命周期,然后执行相关的操作.每个请求都没有"注册"路由,它们只存储在模块的集合中,引擎执行正确的路径.

  • 但是,所有路由都会在每个请求事件的DynamicDictionary中恢复,但不需要它们(因为我们知道哪条路由匹配请求)?是的,那么对于不需要的请求工作似乎很奇怪.是否有更好的方式来注册路由而不是在ctor中,以便尽可能少地对每个请求进行? (2认同)
  • @StevenRobbins这不是性能,而是那种对我来说非常令人不安的设计选择.如果注册是在一个单独的`virtual void RegisterRoutes()`方法中完成的,会不会受到影响?它将在启动时从Nancy调用,同时仍然会为每个请求创建模块,而无需任何额外的(尽可能最小的)开销.这也不是一个重大改变,所以旧的模块仍然可以工作. (2认同)