web-dev-qa-db-ja.com

ASP.NET CoreコントローラーでStackExchange.Redisを使用する

MVCコントローラーのビットフィールドやハッシュフィールドなどのRedis機能を使用したいと思います。 ASP.NETコアには ビルトインキャッシュサポート がありますが、これは基本的なGETおよびSETコマンドのみをサポートし、アプリケーションで必要なコマンドはサポートしません。通常の(コンソールなどの)アプリケーションからStackExchange.Redisを使用する方法は知っていますが、ASPサイトで設定する方法がわかりません。

コントローラーから後でアクセスできるように、すべての接続初期化コードをどこに配置すればよいですか?これは依存性注入を使用するものですか?

10
Naarkie

このブログ には、ASP.NET Coreへのredisサービスの実装に関する記事( full code repo )が記載されています。 POCOクラスを自動的にredisハッシュセットにシリアル化する定型サービスがあります。

7
Naarkie

StartupクラスのConfigureServicesメソッドに、追加する必要があります。

services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect("yourConnectionString"));

次に、コンストラクタシグネチャを次のようなものに変更することにより、依存性注入を使用できます。

public YourController : Controller
{
    private IConnectionMultiplexer _connectionMultiplexer;
    public YourController(IConnectionMultiplexer multiplexer)
    {
        this._connectionMultiplexer = multiplexer;
    }
}
19
Trey Dibler

簡単な方法は、Nugetパッケージをインストールすることです

Install-Package Microsoft.Extensions.Caching.Redis 

ASP MVC .NET Coreプロジェクト。

次に、ConfigureServicesメソッドのクラスStartupで依存性注入を使用してサービスを構成します。

        services.AddDistributedRedisCache(option =>
        {
            option.Configuration = Configuration["AzureCache:ConnectionString"];
            option.InstanceName = "master";
        });

次のようなリリース展開用のappsettings.jsonにバインディング接続文字列を追加します。

"AzureCache": {
    "ConnectionString": "" 
  }  

Azureを使用する場合は、ASP MVC .NET Core App Serviceのアプリケーション設定でアプリケーション設定名を追加して、デプロイ後にAzure側で実行時にバインドします。本番用の接続文字列セキュリティ上の理由からコード内で発生しないようにしてください。

Azureバインディング接続文字列

たとえば、バインディングを追加します開発appsettings.Development.json

"AzureCache": {
    "ConnectionString": "<your connection string>"
  }

コンストラクターでコントローラーにサービスを注入します。

public class SomeController : Controller
{
        public SomeController(IDistributedCache distributedCache)
2
Ondrej Rozinek