4

MVC を使用せずに、純粋な AppHost 実装として ServiceStack を使用したいと考えています。これを使用して、シングル ページ アプリを駆動したいと考えています。

SPA の単一の HTML シェル ページを提供することは簡単であり、それを行うための多くの例を見つけました。ただし、多数の JavaScript ファイルも提供する必要があり、これを行う最善の方法を評価しています。単純にスクリプト タグを HTML シェル ページに配置することはできますが、バンドルと縮小の利点が得られず、新しい JavaScript ファイルを追加するたびにこれを維持する必要があります。

これらの問題はすべて、カセットや ASP.NET MVC4 バンドルなどのバンドル ソリューションで解決されます。しかし、これらを ServiceStack AppHost でどのように使用すればよいでしょうか?

ServiceStack.Bundler プロジェクトは素晴らしいですが、HTML で JavaScript タグをレンダリングする HTML ヘルパーのベースなど、ASP.NET MVC に依存しているようです。

可能であれば、MVC に依存せずにこれを実行できるようにしたいと考えています。

4

3 に答える 3

2

Cassette も Microsoft.AspNet.Web.Optimization (既定で MVC4 プロジェクトに含まれるバンドル ソリューション) も、ASP.NET MVC に依存していないようです。したがって、どちらのソリューションも、ServiceStack の AppHost 実装で動作するように作成できます。

カセットの場合:

NuGet から以下をインストールすると、すべて問題なく動作します。

ServiceStack.Host.AspNet

ServiceStack.Razor

Cassette.Aspnet

...そして、通常どおり Razor 'cshtml' ファイルから Cassette を使用します。

数分間頭を悩ませた小さな落とし穴:

HttpHandlers が web.config にリストされている順序は重要です。このServiceStack.Host.AspNetパッケージは、ワイルドカードを使用する HttpHandler パスを追加します。これは、 のようなそれ以上の HttpHandler にCassette.axdは到達しないことを意味します。

web.config の順序を次のように変更するだけです。

<httpHandlers>
  <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
  <add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
</httpHandlers>

に:

<httpHandlers>
  <add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
  <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>

問題を修正しました。最初に Nuget から Cassette.Aspnet をインストールしたことが、この問題の発生を最初から防いでいたかどうかはわかりません。

Microsoft.AspNet.Web.Optimization の場合:

NuGet から、以下をインストールします。

ServiceStack.Host.AspNet

ServiceStack.Razor

Microsoft.AspNet.Web.最適化

これを行うと、Microsoft.AspNet.Web.Optimization のバンドルと縮小を通常どおり使用できます。

BundleConfig.csデフォルトの MVC4 プロジェクトで見られる規則に従って、ファイルを追加しました。次にBundleConfig.RegisterBundles(BundleTable.Bundles);、ServiceStack AppHost ファイルから呼び出します。

その後、@Scripts.Render()Razor ファイル内のすべてのステートメントは正常に機能します。

于 2013-06-01T08:31:46.530 に答える
2

したがって、「バンドルと縮小」ソリューションを使用するために ServiceStack の AppHost 内で行う必要があることは何もないと思います。「バンドル」プロセスを簡素化するには...

1 - 新しいファイルを作成するフォルダーからの「バンドル」ファイル
2 - View/Html からの「バンドル」ファイルの参照

新しいファイルを作成するフォルダーからファイルを「バンドル」する方法

カセット

  • Cassette は、CassetteBundleConfiguration クラスの Configure メソッドを呼び出す「いくつかの魔法」(洞察については web.config の変更を参照) でこのプロセスを処理しているようです。Nuget パッケージをインストールすると、「セットアップ」が自動的に行われます。

ServiceStack.Bundler

「バンドルされた」ファイルを参照します

ファイルのパスを知っている限り、好きなようにこれを行うことができます

<link href="/Content/some.css" rel="stylesheet" type="text/css" />
<script src='some.js'></script>

Cassette は、いくつかの便利なレンダリング機能を提供します

@Bundles.Reference('yourbundle')
@Bundles.RenderStylesheets()
@Bundles.RenderScripts()

ServiceStack.Bundler もいくつか提供しています (これは System.Web.MVC に依存するコードだと思います)

@Html.RenderJsBundle()
@Html.RenderCssBundle() 

<link>注: これらはおよび<script>HTML タグを書き出すだけです。

于 2013-05-15T22:40:29.020 に答える