国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.Net6 使用Autofac進(jìn)行依賴注入

這篇具有很好參考價(jià)值的文章主要介紹了.Net6 使用Autofac進(jìn)行依賴注入。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、背景

  剛接觸.net 6,記錄一下在.net6上是怎么使用Autofac進(jìn)行動(dòng)態(tài)的依賴注入的

二、注入方式

  1、新建一個(gè)webapi項(xiàng)目,框架選擇net 6

  2、引用Nuget包---Autofac.Extensions.Dependency  

  3、在Program.cs上添加如下代碼

//依賴注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())//注冊(cè)服務(wù)工廠
.ConfigureContainer<ContainerBuilder>(container =>
{  //添加依賴注入,AddModule是一個(gè)自定義的拓展方法,將依賴注入的方法單獨(dú)提取出來,方便管理
    builder.Services.AddModule(container);
});
public static IServiceCollection AddModule(this IServiceCollection services, ContainerBuilder builder, IConfiguration configuration)
        {
	
            //初始化配置文件
            Type baseType = typeof(IDependency);//自定義的空類
            //動(dòng)態(tài)運(yùn)行項(xiàng)目的類庫
            var compilationLibrary = DependencyContext.Default
                .RuntimeLibraries
                .Where(x => !x.Serviceable
                && x.Type == "project")
                .ToList();
            var count1 = compilationLibrary.Count;
            List<Assembly> assemblyList = new List<Assembly>();

            foreach (var _compilation in compilationLibrary)
            {
                try
                {
                    assemblyList.Add(AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(_compilation.Name)));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(_compilation.Name + ex.Message);
                }
            }
            //注冊(cè)程序集的方式添加依賴
            builder.RegisterAssemblyTypes(assemblyList.ToArray())
             .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)//過濾非抽象類,繼承了IDependency接口的類
             .AsSelf().AsImplementedInterfaces()
             .InstancePerLifetimeScope();//實(shí)例的生命周期
            
            //單獨(dú)注冊(cè)依賴服務(wù)
			//注冊(cè)數(shù)據(jù)庫基礎(chǔ)操作和工作單元
			builder.RegisterGeneric(typeof(BaseRepository<,>)).As(typeof(IRepository<,>));
			builder.RegisterGeneric(typeof(UnitWork<>)).As(typeof(IUnitWork<>));
			 //注冊(cè)app層
			 builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
			
			 builder.RegisterType(typeof(RedisCacheContext)).As(typeof(ICacheContext));
			 
			 
			 
             builder.RegisterType<MemoryCacheService>().As<ICacheService>().SingleInstance();
            
            return services;
        }

4.

//依賴注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())

以及再startup.cs中添加ConfigureContainer方法

? ?public void ConfigureContainer(ContainerBuilder builder)
? ?{
? ? ? ?ExtAutofac.InitAutofac(builder);
? ?}

在app層文章來源地址http://www.zghlxwxcb.cn/news/detail-847654.html



namespace App
{
    public static  class ExtAutofac
    {
        private static IContainer _container;
   
        public static void InitAutofac(ContainerBuilder builder)
        {
            
            //注冊(cè)數(shù)據(jù)庫基礎(chǔ)操作和工作單元
            builder.RegisterGeneric(typeof(BaseRepository<,>)).As(typeof(IRepository<,>));
            builder.RegisterGeneric(typeof(UnitWork<>)).As(typeof(IUnitWork<>));

            
            //注冊(cè)app層
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
            
            builder.RegisterType(typeof(RedisCacheContext)).As(typeof(ICacheContext));
            builder.RegisterType(typeof(HttpContextAccessor)).As(typeof(IHttpContextAccessor));
            
            InitDependency(builder);

        }


        /// <summary>
        /// 注入所有繼承了IDependency接口
        /// </summary>
        /// <param name="builder"></param>
        private static void InitDependency(ContainerBuilder builder)
        {
            Type baseType = typeof(IDependency);
            var compilationLibrary = DependencyContext.Default
                .CompileLibraries
                .Where(x => !x.Serviceable
                            && x.Type == "project")
                .ToList();
            var count1 = compilationLibrary.Count;
            List<Assembly> assemblyList = new List<Assembly>();

            foreach (var _compilation in compilationLibrary)
            {
                try
                {
                    assemblyList.Add(AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(_compilation.Name)));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(_compilation.Name + ex.Message);
                }
            }
            
            builder.RegisterAssemblyTypes(assemblyList.ToArray())
                .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
                .AsSelf().AsImplementedInterfaces()
                .InstancePerLifetimeScope();
        }
    }
}

到了這里,關(guān)于.Net6 使用Autofac進(jìn)行依賴注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • .NET 6 整合 Autofac 依賴注入容器

    一行業(yè)務(wù)代碼還沒寫,框架代碼一大堆,不利于學(xué)習(xí)。 常看到j(luò)ava的學(xué)習(xí)資料或博客,標(biāo)題一般為《SpringBoot 整合 XXX》,所以仿照著寫了《.NET 6 整合 Autofac 依賴注入容器》這樣一個(gè)標(biāo)題。 以下是我自己的用法,可能不是最佳實(shí)踐。 NuGet搜索并安裝: Autofac Autofac.Extensions.Depe

    2023年04月26日
    瀏覽(28)
  • .net中優(yōu)秀依賴注入框架Autofac看一篇就夠了

    .net中優(yōu)秀依賴注入框架Autofac看一篇就夠了

    ? Autofac 是一個(gè)功能豐富的 .NET 依賴注入容器,用于管理對(duì)象的生命周期、解決依賴關(guān)系以及進(jìn)行屬性注入。本文將詳細(xì)講解 Autofac 的使用方法,包括多種不同的注冊(cè)方式,屬性注入,以及如何使用多個(gè)? ContainerBuilder?來注冊(cè)和合并組件。我們將提供詳細(xì)的源代碼示例來說明

    2024年02月05日
    瀏覽(15)
  • .Net6.0系列-7 依賴注入(一)

    依賴注入(Dependency Injection,DI)是控制反轉(zhuǎn)(Inversion of Control,IOC)思想的實(shí)現(xiàn)方式,依賴注入簡(jiǎn)化模塊的組裝過程,降低模塊之間的耦合度. DI的幾個(gè)概念: 服務(wù)(Service):和框架請(qǐng)求之后返回的一個(gè)對(duì)象,可以是一個(gè)數(shù)據(jù)庫鏈接,也可以是一個(gè)文件處理的方法,或者是數(shù)據(jù)處理的一個(gè)過程方法

    2023年04月11日
    瀏覽(21)
  • 【.NET6+WPF】WPF使用prism框架+Unity IOC容器實(shí)現(xiàn)MVVM雙向綁定和依賴注入

    【.NET6+WPF】WPF使用prism框架+Unity IOC容器實(shí)現(xiàn)MVVM雙向綁定和依賴注入

    前言:在C/S架構(gòu)上,WPF無疑已經(jīng)是“桌面一霸”了。在.NET生態(tài)環(huán)境中,很多小伙伴還在使用Winform開發(fā)C/S架構(gòu)的桌面應(yīng)用。但是WPF也有很多年的歷史了,并且基于MVVM的開發(fā)模式,受到了很多開發(fā)者的喜愛。 并且隨著工業(yè)化的進(jìn)展,以及幾年前微軟對(duì).NET平臺(tái)的開源,國內(nèi)大多

    2024年02月06日
    瀏覽(27)
  • 如何在.net6webapi中實(shí)現(xiàn)自動(dòng)依賴注入

    如何在.net6webapi中實(shí)現(xiàn)自動(dòng)依賴注入

    IOC(Inversion of Control)控制反轉(zhuǎn): 控制反正是一種設(shè)計(jì)思想,旨在將程序中的控制權(quán)從程序員轉(zhuǎn)移到了容器中。容器負(fù)責(zé)管理對(duì)象之間的依賴關(guān)系,使得對(duì)象不再直接依賴于其他對(duì)象,而是通過依賴注入的方式來獲取所需的資源。 DI(Dependency Injection)依賴注入: 他是IOC的具

    2024年02月08日
    瀏覽(17)
  • .Net6使用WebSocket與前端進(jìn)行通信

    .Net6使用WebSocket與前端進(jìn)行通信

    1. 創(chuàng)建類WebSocketTest: 2. 在program.cs中進(jìn)行綁定 3. 使用websocket在線工具模擬請(qǐng)求:

    2024年02月03日
    瀏覽(31)
  • .NET使用依賴注入,控制反轉(zhuǎn)

    .NET 支持依賴項(xiàng)注入 (DI) 軟件設(shè)計(jì)模式,這是一種在類及其依賴項(xiàng)之間實(shí)現(xiàn) 控制 (IoC) 的反轉(zhuǎn) 的技術(shù) 避免有狀態(tài)的、靜態(tài)類和成員。 通過將應(yīng)用設(shè)計(jì)為改用單一實(shí)例服務(wù),避免創(chuàng)建全局狀態(tài)。 避免在服務(wù)中直接實(shí)例化依賴類。 直接實(shí)例化會(huì)將代碼耦合到特定實(shí)現(xiàn)。 不在服務(wù)

    2023年04月16日
    瀏覽(26)
  • 基于.net6的WPF程序使用SignalR進(jìn)行通信

    基于.net6的WPF程序使用SignalR進(jìn)行通信

    之前寫的SignalR通信,是基于.net6api,BS和CS進(jìn)行通信的。 .net6API使用SignalR+vue3聊天+WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天寫一篇關(guān)于CS客戶端的SignalR通信,后臺(tái)服務(wù)使用.net6api?。其實(shí)和之前寫的差不多,主要在于服務(wù)端以后臺(tái)進(jìn)程的方式存在,而客戶端以exe方式存在,

    2024年02月16日
    瀏覽(26)
  • 【微軟技術(shù)?!緾#.NET 中使用依賴注入

    先決條件 創(chuàng)建新的控制臺(tái)應(yīng)用程序 添加接口 添加默認(rèn)實(shí)現(xiàn) 添加需要 DI 的服務(wù) 為 DI 注冊(cè)服務(wù) 結(jié)束語 本文介紹如何在 .NET 中使用依賴注入 (DI)。 借助 Microsoft 擴(kuò)展,可通過添加服務(wù)并在?IServiceCollection?中配置這些服務(wù)來管理 DI。?IHost?接口會(huì)公開?IServiceProvider?實(shí)例,它充

    2024年02月04日
    瀏覽(23)
  • “warning NU1701: 項(xiàng)目依賴包與項(xiàng)目框架net6.0不完全兼容“

    一個(gè)Net6的Web項(xiàng)目,有一個(gè)警告: 在項(xiàng)目文件里,這樣 在nuget包管理器界面,看到 Microsoft.AspNet.WebApi.Core 的信息,其依賴于 Microsoft.AspNet.WebApi.Client ,且其也滿足 。NetStandard V2。0 的,但看這個(gè) Client ,其又依賴于NewtonnSoft.Json的舊版本,從而導(dǎo)致依賴鏈最終到了 NetFramework4.* 的

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包