簡體   English   中英

在 ASP.net 核心應用程序中使用 IMemoryCache 和 Unity DI Container

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM