16

Nancy 0.6 で解決済み


自己ホスト型のナンシーにカミソリ ビューを返させようとしていますが、うまく動作しません。Nancy ソース コードのサンプルでは Web プロジェクトを使用していますが、ページにはこれが必要であるとは記載されていません。構成セクションを指定しようとしましたが、再び「このステップは完全にオプションです」と表示されます (イタリック体は彼らのものです)。ソースをたどると、かみそりが有効なビューエンジンのようには見えませんが、構成または自分のNancyModuleのどこに追加できるかわかりません...助けていただければ幸いです。

エンジンを見る

彼らがviewsフォルダーを見ていることが最終的にわかったとき、cshtmlはサポートされている拡張機能のようですが、DefaultViewFactoryにはビューエンジンに関連付けられていないため、nullになります:

ここに画像の説明を入力

私のコード:

public Module1()
{
    Get["/me"] = parms =>
    {
        return View["Static.html"]; // WORKS!
    };
    Get["/you"] = parms =>
    {
        dynamic model = new ExpandoObject();
        //return View["~/Static.cshtml", model];
        //return View["/Static.cshtml", model];
        return View["Static.cshtml", model]; // blank page, no error or anything
    };
}

Static.cshtml は、"Hello, world!" という単なる html ページです。

4

3 に答える 3

10

console、form、およびwpfプロジェクトは、実行可能ファイルと同じ場所にビューファイルを配置します。つまり、デバッグモードで作業するには、view.cshtmlファイルをプロジェクトのbin\debugフォルダーにコピーする必要があります。
だから:あなたの.cshtmlファイルを出力へのコピーとしてマークしてください

于 2011-10-12T05:15:58.423 に答える
3

NancyHost を作成したときに、カミソリ アセンブリが AppDomain に読み込まれませんでした。NancyHost には TinyIoc スキャンがあり、開始時に読み込まれたすべてのアセンブリ内のすべてのクラスのリストを作成します。このリストは更新されません。RazorViewEngine を作成してアセンブリを強制的にロードすることで修正しました。Register() 呼び出しの使用も機能しますが、アセンブリを強制的にロードするという理由だけで、ナンシーには独自のコンテナーがあると思います。これらの場所はすべて機能しますが、NancyModule に配置しても機能しません。

//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
//RazorViewEngine rve = new RazorViewEngine(); // WORKS
m_Host = new NancyHost(m_Uri);
//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
m_Host.Start();
TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS

誰かがこの回答を書き直し、よりクリーンな方法またはより良い解決策を見つけたい場合は、回答を受け入れます。

于 2011-07-15T01:31:34.033 に答える
1

nancy 0.8.0 と Razor で似たような問題がありました。Nancy、Host.Self、および ViewEngine.Razor をダウンロードしてインストールし、参照しました。

それでも、コンパイラが Nancy.ViewEngines.Razor で Razor 名前空間を見つけられなかったとき (オブジェクト ブラウザーと Reflector は名前空間と型が完全に適切であることを示しました)、私はすべての通常の名前空間参照 vodo を行いました。きれいにし、削除し、追加し、アンストールし、インストールし、手動で dll をビンに移動し、幸運なコンパイル ハットを被り、左肩に 3 回唾を吐きかけましたが、それでも同じ結果が得られました。AppDomainにRazorがロードされていません...

アセンブリを appdomain に手動でロードすることに戻り、アクティベーターを使用して、Tiny.IoC コンテナー ファクトリの RazorViewEngine タイプのインスタンスを作成します。

実際の問題は、ソリューションのスタートアップ プロジェクトが .NET Framework 4 クライアント プロファイルを対象としていたことです。どうやら、クライアントの .Net バンドルは、完全な 4 バージョン用にコンパイルされた dll の一部を消費および表示できません。

いずれかの方法。ビルドを「通常の」.NET 4 に変更すると、すべてが正常に戻りました。コンパイラは名前空間で型を見つけ、Tiny.IoC はすべてを接続できます。

于 2011-10-10T23:34:39.960 に答える