我正在与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变为抽象的“幻像类”
答案 0 :(得分:7)
Nancy小组中有一个可能与您的问题有关的讨论,它肯定与Nancy不能识别的非抽象基础模块有关。以下是AndreasHåkansson所说的话:
Nancy找到继承NancyModule并假设的所有内容 这是它可以实例化的东西。南希知道它不能 创建抽象模块的实例。所以,如果你有一个基础模块 那不是抽象的南希将尝试新的。我想 认为99%的时候,拥有一个非抽象的基类是一个 破碎的设计。
以下是讨论的链接:Unable to resolve type: Nancy.Routing.DefaultRouteResolver