ナンシーと一緒に小さなアプリケーションを構築しています
他のモジュールが継承できる一種の基本クラスが欲しいです。
以下を参照してください(これが抽象クラスではない理由があります。これについては以下で説明します)
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を再度抽象化します。