我有一个从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引导程序。
任何帮助表示感谢。
编辑:
这是我项目的截图:
答案 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版本。
答案 2 :(得分:0)
请浏览以下链接,我认为这会对您有所帮助。
答案 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);
}