3

我正在与 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类是抽象的,这不会发生

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

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

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

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

所以我需要能够创建一种类型的导入器,基于传入的类型

(基本上,如果用户点击 url /customer,它的作用与这样的类相同)

public class CustomerImporter : ImporterModule<Customer>
{
}

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

4

1 回答 1

7

Nancy 小组中有一个讨论可能与您的问题有关,它肯定与 Nancy 无法识别的非抽象基础模块有关。这是 Andreas Håkansson 不得不说的:

Nancy 找到所有继承 NancyModule 的东西,并假设它是可以实例化的东西。Nancy 知道它不能创建抽象模块的实例。因此,如果您有一个非抽象的基本模块,那么 Nancy 将尝试更新它。我想在 99% 的时间里,拥有一个非抽象的基类是一个错误的设计。

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

于 2012-09-24T10:32:39.063 回答