3

ナンシーと一緒に小さなアプリケーションを構築しています

他のモジュールが継承できる一種の基本クラスが欲しいです。
以下を参照してください(これが抽象クラスではない理由があります。これについては以下で説明します)

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>
{
}

したがって、私が見ているように、2つの選択肢があります
。1)ImportModuleをマップしようとするナンシーを停止します。2
)ImportModuleから継承する「ファントムクラス」をインスタンス化し、ImportModuleを再度抽象化します。

4

1 に答える 1

7

あなたの問題に関連しているかもしれないナンシーグループの議論があります、それは確かにナンシーによって認識されていない非抽象ベースモジュールに関連しています。AndreasHåkanssonが言わなければならなかったことは次のとおりです。

Nancyは、NancyModuleを継承しているすべてのものを見つけて、インスタンス化できるものであると想定します。ナンシーは、抽象モジュールのインスタンスを作成できないことを認識しています。したがって、抽象的ではないベースモジュールがある場合、ナンシーはそれを新しくしようとします。99%の確率で、非抽象基本クラスを持つことは壊れた設計だと思います。

そして、ここにディスカッションへのリンクがあります:タイプを解決できません:Nancy.Routing.DefaultRouteResolver

于 2012-09-24T10:32:39.063 に答える