2017-02-05 6 views
3

당신은 당신의 시작에서 컨트롤러Asp.Net 코어 : 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에 의해 시작됩니다. HangFire 예약 된 작업을 통해 시작하는 내 코드 내에서 memorycache에 어떻게 액세스합니까?

public class ScheduledStuff 
{ 
    public void RunScheduledTasks() 
    { 
     //want to access the same memorycache here ... 
    } 
} 

답변

3

메모리 컨테이너 인스턴스는 DI 컨테이너에 의해 제어되는 모든 구성 요소에 삽입 될 수 있습니다.

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

및 ScheduledStuff 생성자에서 종속성으로 IMemoryCache를 선언 :

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'에서 의존성으로 정의해야합니다. –