![](/img/trans.png)
[英]Possible to use IMemoryCache in ASP.NET Core if it is *not* dependency injected?
[英]Use IMemoryCache with Unity DI Container in ASP.net core application
我想在我的 ASP.Net Core 應用程序中使用IMemoryCache
,但問題是我不知道如何在 Unity DI 容器中注冊它,而不是默認的 DI 實現。
如果我會使用默認 DI,它會通過添加來解決問題
services.AddMemoryCache();
到startup.cs的行。
因此,我將不勝感激任何有助於我將IMemoryCache
與 Unity DI 一起使用的想法,因為現在我收到以下錯誤:
InvalidOperationException:當前類型 Microsoft.Extensions.Caching.Memory.IMemoryCache 是接口,無法構造。 您是否缺少類型映射?
啟動時的 DI 部分:
public void Configure (IApplicationBuilder app, IStringLocalizer<Startup> stringLocalizer)
{
InitializeContext ();
....
private static void InitializeContext ()
{
var container = new UnityContainer ();
UnityConfigurationSection section
= (UnityConfigurationSection) ConfigurationManager.GetSection ("unity");
section.Configure (container, "primaryUnityContainer");
var resolver = new UnityDependencyResolver (container);
container.RegisterInstance<IDependencyResolver> (resolver);
DependencyContext.Initialize (resolver);
}
更新:
它是來自 Microsoft.Practices.Unity 命名空間的舊版 Unity DI 容器,不能用作 .net 核心的默認 DI
使用Unity.Microsoft.DependencyInjection
與Microsoft.Extensions.DependencyInjection兼容系統集成的 Unity 擴展
改變啟動方式
public void ConfigureServices(IServiceCollection services) {
services.AddMemoryCache(); //<-- Adding memory cache
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_xxx);
//...
}
public void ConfigureContainer(IUnityContainer container) {
// Could be used to register more types
UnityConfigurationSection section
= (UnityConfigurationSection) ConfigurationManager.GetSection ("unity");
section.Configure (container, "primaryUnityContainer");
var resolver = new UnityDependencyResolver (container);
container.RegisterInstance<IDependencyResolver> (resolver);
DependencyContext.Initialize (resolver);
}
注意 DI 配置代碼是如何移動到它們各自的方法中的
在ConfigureServices
中添加到服務集合的所有內容都將由 Unity ServiceProviderFactory 填充到容器中
確保在構建主機時添加容器工廠以使用 Unity 作為默認 DI
在WebHostBuilder
添加UseUnityServiceProvider(...)
方法
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUnityServiceProvider() // <---- Add this line
.UseStartup<Startup>()
.Build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.