2

カスタムOutputCacheProviderを実装しました

public class MongoDBCacheProvider : OutputCacheProvider, IDisposable { ... }

cacheproviderは次のように登録されます。

<outputCache defaultProvider="MongoDBCacheProvider" enableOutputCache="true"  >
  <providers>
    <add name="MongoDBCacheProvider" type="Mynamespace.Core.Caching.MongoDBCacheProvider, Mynamespace.Core" />
  </providers>
</outputCache>

コンストラクターにいくつかの引数を渡す必要があります。Ninjectを使用してキャッシュプロバイダーをバインドしたいと思います。

this.Bind<System.Web.Caching.OutputCacheProvider>()
    .To<Core.Caching.MongoDBCacheProvider>()
    .WithConstructorArgument("databaseName", dbName);

より多くの引数を渡す必要がありますが、これは単なる例です。どういうわけかその文字列をそこに取得するための簡単な解決策が存在すると確信していますが、他のすべてのクラスで使用するのと同じようにNinjectを使用したいと思います。

これは、「このオブジェクトにパラメーターなしのコンストラクターが定義されていません」というメッセージで失敗します。次のバインディングも機能しません。

this.Bind<Core.Caching.MongoDBCacheProvider>().ToSelf()
    .InSingletonScope()
    .WithConstructorArgument("databaseName", dbName);

エラーが発生する前にバインディングが実行されることを確認しました。ASP .NETは、どういうわけかninjectバインディングをバイパスします。それのために工場を接続する方法もないようです。

派生したOutputCacheProviderにコンストラクター引数を渡す方法を知っている人はいますか?

ありがとうございました。

4

1 に答える 1

1

Injectアプリの起動時にオブジェクトを挿入することで、Webアプリのライフサイクルの早い段階でオブジェクトにアクセスできるようになります。

注意:インスタンスの作成を制御するためにキャッシュプロバイダープロバイダーを取得する方法がない可能性があるため、コンストラクタインジェクションよりもプロパティセッターインジェクションを使用する必要があります。

@RemoGloorによるこのブログ投稿を参照してください

于 2012-08-18T14:47:56.550 に答える