3

RavenDB でブートストラップ NancyFX を追加しようとしていますが、アプリケーションを実行しようとすると次のエラーが発生します...

「型を解決できません: Nancy.IResponseFormatter」

環境:

ASP.Net

ナンシー

Nancy.Hosting.Aspnet

レイヴンDB

VS2010 開発サーバー

すべてのコードを貼り付ける代わりに、例として使用したサイトへのリンクを次に示します。例として、それを動作させることができるかどうかを確認するために、逐語的にコピーしたことを意味します。 http://stuff-for-geeks.com/category/NancyFx.aspx

このコードがデモで実際に実行されるのを見たことがありますが、何らかの理由でまったく実行できません。起動時に失敗します。Nancy が私の BootStrapper を使用していないかのようです。

スタック トレースの詳細:

[TypeInitializationException: 'Nancy.Hosting.Aspnet.NancyHttpRequestHandler' の型初期化子が例外をスローしました。] Nancy.Hosting.Aspnet.NancyHttpRequestHandler..ctor() +0

[TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。]

どんな助けでも本当に感謝しています。

4

2 に答える 2

3

そのコードは古いバージョンの Nancy に基づいています。代わりに IResponseFormatterFactory を使用することを検討する必要があります。ブログ投稿で定義されているカスタム モジュール ビルダーは、DefaultNancyModuleBuilder の古いコピーに基づいており、現在のバージョンを確認した場合はhttps://github.com/NancyFx/Nancy/blob/master/src/ Nancy/Routing/DefaultNancyModuleBuilder.cs必要な調整を行うことができるはずです

于 2012-03-01T00:22:52.747 に答える
2

RavenAwareModuleBuilder議論中のクラスのコードは次のとおりです。

編集1

以下のコードは、ナンシーリリース0.12用に更新されています。NegotiationContextBuildModuleメソッドの新しい行に注意してください。

public class RavenAwareModuleBuilder : INancyModuleBuilder
{
    private readonly IViewFactory viewFactory;
    private readonly IResponseFormatterFactory responseFormatterFactory;
    private readonly IModelBinderLocator modelBinderLocator;
    private readonly IModelValidatorLocator validatorLocator;
    private readonly IRavenSessionProvider ravenSessionProvider;

    public RavenAwareModuleBuilder(IViewFactory viewFactory, IResponseFormatterFactory responseFormatterFactory, IModelBinderLocator modelBinderLocator, IModelValidatorLocator validatorLocator, IRavenSessionProvider ravenSessionProvider)
    {
        this.viewFactory = viewFactory;
        this.responseFormatterFactory = responseFormatterFactory;
        this.modelBinderLocator = modelBinderLocator;
        this.validatorLocator = validatorLocator;
        this.ravenSessionProvider = ravenSessionProvider;
    }


    public NancyModule BuildModule(NancyModule module, NancyContext context)
    {            
        context.NegotiationContext = new NegotiationContext
        {
            ModuleName = module.GetModuleName(),
            ModulePath = module.ModulePath,
        };

        module.Context = context;
        module.Response = this.responseFormatterFactory.Create(context);
        module.ViewFactory = this.viewFactory;
        module.ModelBinderLocator = this.modelBinderLocator;
        module.ValidatorLocator = this.validatorLocator;

        context.Items.Add(
            "IDocumentSession", 
            ravenSessionProvider.GetSession()
        );

        module.After.AddItemToStartOfPipeline(ctx =>
        {
            var session = ctx.Items["IDocumentSession"] as IDocumentSession;
            if (session != null) session.Dispose();
        });

        return module;
    }
}
于 2012-04-17T09:18:39.360 に答える