我在ASP.NET应用程序中何处注册IMemoryCache?

时间:2016-07-25 14:14:07

标签: c# asp.net .net asp.net-mvc unity-container

我有一个从Visual Studio 2015 Community Edition创建的ASP.NET Web应用程序。 .NET Framework是4.6.1。

我不知道哪个版本的ASP.NET我的Web应用程序正在使用ASP.NET MVC 4? ASP.NET MVC 5?它在任何地方都没有提到。

我尝试将IMemoryCache服务(从Microsoft.Extensions.Caching.Memory)注册到我的Microsoft Unity容器中。但是,我在Google上发现的任何内容都指的是在services.AddCaching()文件中添加Startup.cs

我没有Startup.cs个文件。我只看到Global.asax。此外,我的所有自定义依赖项都在UnityConfig.cs中注册,这是在安装NuGet包Unity.Mvc时提供的,这是Microsoft的Microsoft Unity Unity引导程序。

任何帮助表示感谢。

编辑:

这是我项目的截图:

enter image description here

4 个答案:

答案 0 :(得分:4)

在.NET Core中,AddMemoryCache扩展看起来像这样:

services.TryAdd(ServiceDescriptor.Singleton<IMemoryCache, MemoryCache>());

因此,在.Net Framework中,您可以使用以下内容(对于Autofac):

builder.RegisterType<MemoryCache>().As<IMemoryCache>().SingleInstance();

UPD:但是MemoryCache依赖于IOptions<>,您也应该注册它:

builder.RegisterGeneric(typeof(OptionsManager<>)).As(typeof(IOptions<>)).SingleInstance();
builder.RegisterGeneric(typeof(OptionsManager<>)).As(typeof(IOptionsSnapshot<>)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(OptionsMonitor<>)).As(typeof(IOptionsMonitor<>)).SingleInstance();
builder.RegisterGeneric(typeof(OptionsFactory<>)).As(typeof(IOptionsFactory<>));
builder.RegisterGeneric(typeof(OptionsCache<>)).As(typeof(IOptionsMonitorCache<>)).SingleInstance();

答案 1 :(得分:1)

您所指的是ASP.Net Core(ASP.Net 5)

的一部分

在新版本中,您不再拥有Global.asax文件,您在Startup类中定义了新的Startup处理。此外,DI是标准的,因此现在以不同的方式工作。因此要么升级到最新版本的ASP.Net,要么使用旧版本的DI解决方案:

RESOLVING DEPENDENCIES IN ASP.NET MVC 5 USING UNITY CONTAINER

您使用的软件包也适用于新的ASP.NET版本。

Introduction to ASP.NET Core

答案 2 :(得分:0)

请浏览以下链接,我认为这会对您有所帮助。

Setting Up the Unity Container

答案 3 :(得分:0)

如果您正在使用Unity,则可以执行类似的操作 在UnityConfig.cs中

var memoryCache = new MemoryCacheService(new MemoryCacheOptions());
            container.RegisterInstance<IMemoryCache>(memoryCache);

创建您的MemoryCacheService

public class MemoryCacheService : MemoryCache
    {
        public MemoryCacheService(IOptions<MemoryCacheOptions> optionsAccessor) : base(optionsAccessor)
        {
        }
    }

您的控制器

    private readonly IMemoryCache _memoryCacheService;
public yourcontroller(IMemoryCache memoryCacheService)
{
            _memoryCacheService = memoryCacheService;
        }

    public IHttpActionResult AddCacheItem(string cacheKey)
            {
                _memoryCacheService.Set(cacheKey, DateTime.Now.Ticks );
                var temp = _memoryCacheService.Get(cacheKey);
                return Ok(temp);
            }