Nancy和抽象基础模块类/创建幻像类实例

时间:2012-09-14 14:41:59

标签: reflection abstract-class nancy

我正在与Nancy建立一个小应用程序

我希望有一种基类,其他模块可以继承。
见下文(这是一个不是抽象类的原因,我将在下面解释)

public class ImportModule<T> : NancyModule
{
    protected ImportModule()
        : this(typeof(T).Name.ToLower())
    {
        Get["/"] = _ => "need to select an action - xxx";
        Get["/importnew"] = _ => ImportNew(); //note - method omitted for brevity
    }
}

当我运行我的应用程序时,我得到了

  

无法解析类型:My.NameSpace.TypedImporter`1

作为旁注,如果ImportModule类是抽象的,则不会发生这种情况

OK-
现在,我可以有一个这样的课程:

public class MyCustomImporter : ImportModule<MyCustomType>
{
   //overrides.... 
}

但是,在其他地方,在“DefaultImportModule”中我有以下内容:

var importerModule = Activator.CreateInstance(typeof(ImportModule<>).MakeGenericType(type));

所以我需要能够根据传入的类型创建一种导入器

(基本上,如果用户点击了网址/客户,它会像这样的类做同样的事情)

public class CustomerImporter : ImporterModule<Customer>
{
}

所以,正如我所看到的,我有两个选择:
1)停止南希尝试映射我的ImportModule
2)实例化一个继承自ImportModule并再次使ImportModule变为抽象的“幻像类”

1 个答案:

答案 0 :(得分:7)

Nancy小组中有一个可能与您的问题有关的讨论,它肯定与Nancy不能识别的非抽象基础模块有关。以下是AndreasHåkansson所说的话:

  

Nancy找到继承NancyModule并假设的所有内容   这是它可以实例化的东西。南希知道它不能   创建抽象模块的实例。所以,如果你有一个基础模块   那不是抽象的南希将尝试新的。我想   认为99%的时候,拥有一个非抽象的基类是一个   破碎的设计。

以下是讨论的链接:Unable to resolve type: Nancy.Routing.DefaultRouteResolver