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

Ale*_*lex 3 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
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,我明白了

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

作为旁注,如果ImportModule类是抽象的,那么这不会发生

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

public class MyCustomImporter : ImportModule<MyCustomType>
{
   //overrides.... 
}
Run Code Online (Sandbox Code Playgroud)

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

var importerModule = Activator.CreateInstance(typeof(ImportModule<>).MakeGenericType(type));
Run Code Online (Sandbox Code Playgroud)

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

(基本上,如果用户点击网址/客户,它就像这样的类一样)

public class CustomerImporter : ImporterModule<Customer>
{
}
Run Code Online (Sandbox Code Playgroud)

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

bio*_*tal 7

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

Nancy找到了继承NancyModule的所有东西,并假设它可以实例化.Nancy意识到它无法创建抽象模块的实例.因此,如果你有一个不抽象的基础模块,那么南希将尝试新建它.我想在99%的时间里,拥有一个非抽象的基类是一个破碎的设计.

以下是讨论的链接:无法解析类型:Nancy.Routing.DefaultRouteResolver