2017-07-05 24 views
0

我是Nancy的新手。我想要实现的是创建一个从NancyModule类继承的基类NancyBaseModule。这个班级应该负责“常见的东西”。我想这样做,而不是在扩展方法或静态方法中隐藏这类功能。Nancy,模块未加载

我面临的问题是,通过为这个基类添加功能,注册一个简单的GET方法,这个注册方法的Func将永远不会在Web浏览器中尝试访问时调用。事实上,类的构造函数从来没有被调用过,这让我想到我需要在构造函数中至少注册HTTP方法。正如你可以看到,如果我添加“虚拟”路径,它将一切正常。

这是我的基类看起来像:

public abstract class NancyBaseModule : NancyModule 
{ 
     public NancyBaseModule(string prefix) : base(prefix) 
     { 
      //Get("/dummy", p => 
      //{ 
      // return "Nothing interesting here, Cowboy."; 
      //}); 

      var configurator = new NancyEndpointConfigurator() 
      { 
       RegisterWithReturnValue = (path, action) => 
       { 
        Get(path, action); 
       } 
      }; 

      RegisterEndpoints(configurator); 
     } 

     public abstract void RegisterEndpoints(INancyEndpointConfigurator configurator); 
    } 

我的派生类:

public class AckService : NancyBaseModule 
    { 
     public AckService() : base("AckService") 
     { 
     } 

     public override void RegisterEndpoints(INancyEndpointConfigurator configurator) 
     { 
      configurator.WithReturnValue("/now", p => 
      { 
       return $"Greetings. The time is: {DateTime.Now.ToString()}"; 
      }); 
     } 
    } 

由于我缺乏知识的使用南希,我不太清楚,如果这是正确的方法来考虑框架背后的设计思想。如果任何人明白我想要达到的目标,请点击我的正确方向。

回答

0

我会坚持使用正常注册Get(path,Func<>)语法,我不能对覆盖方法的复杂性有任何好处。此外,我不会在base class中注册路由,因为这会导致路由冲突,只有通用功能应该在您的基本模块。