DoconutExtensions

サービスとミドルウェアの登録

DoconutExtensions (namespace Doconut.Middleware) は、すべての Doconut ホストが行う 3 つの呼び出し(サービス登録 1 件とミドルウェア登録 2 件)を持つ静的クラスです。

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // UseDoconut() の前
app.UseDoconut();

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

DoconutOptions を構築し、失敗時に即座に検証します(DoconutOptions → Startup validation を参照)、そして完全なサービスグラフを登録します:

サービスライフタイム役割
DoconutOptionsSingleton構成オブジェクト
セッションキャッシュサービスSingletonToken → セッションキャッシュ(IMemoryCache も登録されています)
IDoconutLicenseServiceSingleton起動時に一度ロードされるライセンス(優先順位: LicenseStream → LicenseContent → LicensePath → auto-search)
ページ画像パイプラインSingletonページの画像処理を実行します(透かし、回転、スケール、注釈)
ドキュメントセキュリティ(アクセスストア)Singletonトークンとセッションのバインディングを許可します
ViewerTransient公開のオープン/クローズファサード
DocumentConverterTransient変換ファサード — Converter プラグインが必要です
DistributedDocumentPublisher—ドキュメントのアーティファクトを共有ストレージに公開します
ヘルスチェック "doconut"—ASP.NET ヘルスチェックを通じてライセンス/有効期限の状態を報告します

以前の .NET Standard ライブラリには同等の呼び出しはありませんでした。リクエストごとに new Viewer(cache, accessor) を構築し、オプションをミドルウェアに渡していましたが、これらはこの単一の登録に置き換えられます。

知っておくべき2つの動作:

  • Converter はプラグインが必要です。 DocumentConverter を options.AddPlugin<ConverterPlugin>() なしで解決すると例外がスローされます:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • プラグインの権利は起動時に検証されます。 ライセンスが欠如している、レガシー TRIAL ファイルがある、または登録されたプラグインの機能がない有料ライセンスは AddDoconut() 時に失敗します。Temporary/Demo 登録は有効期限を過ぎても存続しますが、実行時ゲートは期限切れの機能を取り消します。

ヘルスチェックは標準の ASP.NET Core メカニズムと統合されます — ライセンス状態をヘルスエンドポイントで取得したい場合はマッピングしてください:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Doconut のページ画像ミドルウェアを追加します。?token= クエリパラメータを含むすべてのリクエストに応答します — ページ、サムネイル、検索、注釈、ページアクション(完全なリクエストテーブルは Core Concepts → How the Viewer Works にあります)。UnsafeMode が false の場合、ドキュメントセキュリティ層が自動的にその前に接続されます。

引数は不要です。 ここで DoconutOptions インスタンスを渡すことは、以前のライブラリの形態であり、もはやコンパイルできません。

リファレンスサンプルはウィジェットのリクエストをパスブランチを通してルーティングし、従来のリクエスト形状を保持します:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

DoconutOptions.ResourcesPath(デフォルトは /doconut-res)で埋め込みの JS、CSS、画像、フォントを提供します。これらは Viewer.ReferenceCss() / ReferenceScripts() がタグを生成するファイルです。

UseDoconut() の前に必ず呼び出してください。 ビューア領域が空のままで、ブラウザコンソールに /doconut-res/... の 404 が表示される場合、この呼び出しが欠落しているか、位置が間違っています。

これは、埋め込みリソース処理ミドルウェアを手動で設定するためのサポートされた代替手段です。

Serving from shared storage

ドキュメントをレンダリングするノードが必ずしもページを提供するノードでないデプロイメント向けに、さらに 2 つの登録があります。これらは Distributed Deployments でエンドツーエンドにカバーされており、シグネチャは次のとおりです:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // オプトインのバックグラウンド公開キュー
IServiceCollection AddDoconutDistributedWidgets(...)        // widget アップロード用の共有バックストア

読み取り側は Doconut.Clouds パッケージからの別個のミドルウェアです:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...) と WebFarmOptions はこのリリースには存在しません。設定ごとのマッピングについては migration guide を参照してください。

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // UnsafeMode = false のときに必要
app.UseDoconutResources(); // 最初の Doconut 呼び出し
app.UseDoconut();          // 2番目の Doconut 呼び出し(または MapWhen ブランチ経由)

このページは役に立ちましたか?