2017-02-05 4 views
3

その非常に簡単:Asp.Netコア:あなたが追加するには、起動中のコントローラ</p> <p>からあなたのメモリキャッシュにアクセスするASP.NETコアで使用メモリキャッシュコントローラ外部

public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMemoryCache(); 
     } 

してからからコントローラ

[Route("api/[controller]")] 
public class MyExampleController : Controller 
{ 
    private IMemoryCache _cache; 

    public MyExampleController(IMemoryCache memoryCache) 
    { 
     _cache = memoryCache; 
    } 

    [HttpGet("{id}", Name = "DoStuff")] 
    public string Get(string id) 
    { 
     var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(1)); 
     _cache.Set("key", "value", cacheEntryOptions); 
    } 
} 

しかし、コントローラの外にある同じメモリキャッシュにどのようにアクセスできますか。例えば。私は、HangFireによって開始されるスケジュールされたタスクを持っています.HandFireのスケジュールされたタスクを介して起動する私のコード内からmemorycacheにアクセスするにはどうすればいいですか?

答えて

3

メモリキャッシュインスタンスは、DIコンテナによって制御される任意のコンポーネントに注入できます。

public void ConfigureServices(IServiceCollection services) { 
    services.AddMemoryCache(); 
    services.AddSingleton<ScheduledStuff>(); 
} 

とScheduledStuffコンストラクタで依存関係としてIMemoryCacheを宣言します:あなたの助けVitaliyため

public class ScheduledStuff { 
    IMemoryCache MemCache; 
    public ScheduledStuff(IMemoryCache memCache) { 
    MemCache = memCache; 
    } 
} 
+0

おかげで、これはあなたがConfigureServices方法でScheduledStuffインスタンスを設定する必要があることを意味します。問題は今、どのようにRunScheduledTasksメソッドを起動できますか? memoryCacheパラメータが必要です。ここでエラー 'scheduledStuff.RunScheduledTasks( - ' <;エラー\t CS7036 \tは、必要な仮パラメータの 'memoryCache' 'ScheduledStuff.ScheduledStuff(IMemoryCache') 'ScheduledStuff scheduledStuff =新しいScheduledStuff()に対応して与えられた引数はありません); ' – SpeedBird527

+1

あなたのコードに' SheduledStuff'インスタンスを作成するのではなく、これをDIコンテナから取得する必要があります。これをControllerやHttpContext.RequestServicesで依存関係として定義する必要があります。 –

関連する問題