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

.Net Framework使用Autofac實(shí)現(xiàn)依賴注入

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

.Net Framework使用Autofac實(shí)現(xiàn)依賴注入

前言

最近也是找了快2周的工作了,收到的面試邀請(qǐng)也就幾個(gè),然后有個(gè)面試題目是用asp.net mvc + Entityframework 做一個(gè)學(xué)生信息增刪改查系統(tǒng)。因?yàn)轭}目要求了用Entityframework 也就是EF 那也就不上core了,web項(xiàng)目也是用Framework 4.8去做的。

本文的重點(diǎn)是IOC容器,在Framework 中是沒有自帶的IOC容器的,那么就需要使用第三方庫(kù)去實(shí)現(xiàn)依賴注入,我這里用的是Autofac。

如果不使用IOC容器去管理類,那么操作數(shù)據(jù)庫(kù)和使用類方法則是

using(MydbContext db = new MydbContext){
	db....
}
StudentService s = new StudentService();
s.Add();

使用方法

Nuget包

首先需要下載2個(gè)Nuget包,分別是:

dotnet add package Autofac --version 7.1.0
dotnet add package Autofac.Mvc5 --version 6.1.0

配置文件

然后在配置文件中,也就是Global.asax.cs文件

然后需要添加如下代碼:

// 創(chuàng)建 Autofac 容器生成器
var builder = new ContainerBuilder();

// 注冊(cè) EF 上下文
builder.RegisterType<SchoolContext>().InstancePerRequest();

// 注冊(cè)其他服務(wù)
builder.RegisterType<StudentService>().As<IStudentService>().InstancePerRequest();
// 注冊(cè)控制器
builder.RegisterControllers(typeof(HomeController).Assembly);

// 構(gòu)建容器
var container = builder.Build();
// 設(shè)置 ASP.NET MVC 的依賴解析器為 Autofac
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

上面我注入了一個(gè)SchoolContext數(shù)據(jù)庫(kù)上下文服務(wù),用于操作數(shù)據(jù)庫(kù)

然后注冊(cè)了StudentService服務(wù),里面是增刪改查代碼

舉個(gè)例子:

public interface IStudentService{
	//刪除
	Task<int> DelAsync(int id);
}
public class StudentService:IStudentService
 {
        private readonly SchoolContext _dbContext;

        public StudentService(SchoolContext dbContext)
        {
            _dbContext = dbContext;
        }
        public async Task<int> DelAsync(int id)
        {
            var student = _dbContext.Students.Include("Score").FirstOrDefault(s => s.Id == id);
            if (student != null)
            {
                // 刪除關(guān)聯(lián)的成績(jī)表
                if (student.Score != null)
                {
                    _dbContext.Scores.Remove(student.Score);
                }

                // 刪除學(xué)生
                _dbContext.Students.Remove(student);
                return await _dbContext.SaveChangesAsync();
            }
            return 0;
    }
}

上面StudentService類實(shí)現(xiàn)了IStudentService接口的方法,并且注入了SchoolContext依賴進(jìn)行數(shù)據(jù)庫(kù)操作。

 public class HomeController : Controller
 {
        private readonly IStudentService _studentService;
        public HomeController(IStudentService studentService)
        {
            _studentService = studentService;
        }
        public async Task<ActionResult> DelStudent(int id)
        {
            int result = await _studentService.DelAsync(id);
            if (result > 0)
            {
                TempData["SuccessMessage"] = "學(xué)生信息刪除成功";
                return RedirectToAction("Index");   
            }
            TempData["SuccessMessage"] = "學(xué)生信息刪除失敗";
            return RedirectToAction("Index");   
        }
}

上面的控制器則是注入了IStudentService然后就可以調(diào)用它的刪除學(xué)生信息的方法了。

我們需要注意的是需要把數(shù)據(jù)庫(kù)上下文和服務(wù)類交給容器去管理。

// 注冊(cè) EF 上下文
builder.RegisterType<SchoolContext>().InstancePerRequest();
// 注冊(cè)其他服務(wù)
builder.RegisterType<StudentService>().As<IStudentService>().InstancePerRequest();
// 注冊(cè)控制器
builder.RegisterControllers(typeof(HomeController).Assembly);

同時(shí)也要注冊(cè)控制器,一開始我去寫的的時(shí)候沒有注冊(cè)控制器,然后會(huì)報(bào)構(gòu)造函數(shù)不能為空的錯(cuò)誤!

生命周期

  1. InstancePerDependency:每次解析時(shí)都創(chuàng)建一個(gè)新的實(shí)例。這是默認(rèn)的生命周期管理方式。
  2. SingleInstance:整個(gè)應(yīng)用程序中只創(chuàng)建一個(gè)實(shí)例,并在后續(xù)的解析中重用該實(shí)例。
  3. InstancePerLifetimeScope:每個(gè)生命周期范圍內(nèi)只創(chuàng)建一個(gè)實(shí)例。生命周期范圍可以通過Autofac的BeginLifetimeScope()方法創(chuàng)建。
  4. InstancePerMatchingLifetimeScope:與InstancePerLifetimeScope類似,但只有在解析時(shí)與指定的生命周期范圍匹配時(shí)才會(huì)創(chuàng)建實(shí)例。
  5. InstancePerRequest:在Web應(yīng)用程序中,每個(gè)HTTP請(qǐng)求都創(chuàng)建一個(gè)新的實(shí)例。這通常用于在Web API或MVC應(yīng)用程序中注冊(cè)服務(wù)。
  6. InstancePerOwned:在每個(gè)Owned<T>上創(chuàng)建一個(gè)新的實(shí)例。Owned<T>是一個(gè)特殊的類型,用于在需要時(shí)創(chuàng)建和釋放實(shí)例。

參考資料

  • 控制范圍和生存期 — Autofac 7.0.0 文檔 https://autofac.readthedocs.io/en/latest/lifetime/index.html#example-web-application

  • NuGet 畫廊 |Autofac.Mvc5 6.1.0 https://www.nuget.org/packages/Autofac.Mvc5文章來源地址http://www.zghlxwxcb.cn/news/detail-707936.html

到了這里,關(guān)于.Net Framework使用Autofac實(shí)現(xià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)文章

  • 【.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)的開源,國(guó)內(nèi)大多

    2024年02月06日
    瀏覽(28)
  • .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日
    瀏覽(28)
  • net6 winform使用依賴注入(IOC)

    net6 winform使用依賴注入(IOC)

    依賴注入(DI)是一種設(shè)計(jì)模式,它可以消除編程代碼之間的依賴性,因此可以很容易地管理和測(cè)試應(yīng)用程序。它有三種類型分別為構(gòu)造函數(shù)注入,屬性注入以及方法注入。它具有減少依賴性增強(qiáng)組件的可重用性等好處。 通俗的來說我們不通過 new 的方式在類內(nèi)部創(chuàng)建依賴類

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

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

    2024年02月04日
    瀏覽(24)
  • 【ASP.NET Core 基礎(chǔ)知識(shí)】--依賴注入(DI)--什么是依賴注入

    依賴注入(Dependency Injection,簡(jiǎn)稱DI)是一種設(shè)計(jì)模式,用于解耦和管理類之間的依賴關(guān)系。它的核心思想是將原本需要在代碼中顯式創(chuàng)建的依賴關(guān)系,交給外部容器進(jìn)行控制和管理。 具體來說,依賴注入的實(shí)現(xiàn)方式是通過將依賴對(duì)象的創(chuàng)建和維護(hù)責(zé)任轉(zhuǎn)移到外部容器中,使

    2024年01月23日
    瀏覽(89)
  • .NET Core 依賴注入

    在.NET Core中,依賴注入(Dependency Injection,簡(jiǎn)稱DI)是框架的一個(gè)重要特性,可以幫助我們解耦代碼、管理對(duì)象生命周期以及提高可測(cè)試性等.一下是.NET Core中依賴注入的一些基本概念和用法: 1、服務(wù)(Service):在DI中,服務(wù)即一個(gè)對(duì)象或者類型。用于完成特定的功能.例如,數(shù)據(jù)庫(kù)訪

    2023年04月24日
    瀏覽(94)
  • .NET 通過源碼深究依賴注入原理

    .NET 通過源碼深究依賴注入原理

    依賴注入 (DI) 是.NET中一個(gè)非常重要的軟件設(shè)計(jì)模式,它可以幫助我們更好地管理和組織組件,提高代碼的可讀性,擴(kuò)展性和可測(cè)試性。在日常工作中,我們一定遇見過這些問題或者疑惑。 Singleton服務(wù)為什么不能依賴Scoped服務(wù)? 多個(gè)構(gòu)造函數(shù)的選擇機(jī)制? 源碼是如何識(shí)別循環(huán)

    2024年02月05日
    瀏覽(30)
  • .Net依賴注入神器Scrutor(上)

    從.Net Core 開始,.Net 平臺(tái)內(nèi)置了一個(gè)輕量,易用的 IOC 的框架,供我們?cè)趹?yīng)用程序中使用,社區(qū)內(nèi)還有很多強(qiáng)大的第三方的依賴注入框架如: Autofac DryIOC Grace LightInject Lamar Stashbox Simple Injector 內(nèi)置的依賴注入容器基本可以滿足大多數(shù)應(yīng)用的需求,除非你需要的特定功能不受它支

    2024年03月19日
    瀏覽(42)
  • 使用 Spring 實(shí)現(xiàn)控制反轉(zhuǎn)和依賴注入

    在本文中,我們將介紹 IoC (控制反轉(zhuǎn))和 DI (依賴注入)的概念,以及如何在 Spring 框架中實(shí)現(xiàn)它們。 控制反轉(zhuǎn)是軟件工程中的一個(gè)原則,它將對(duì)象或程序的某些部分的控制權(quán)轉(zhuǎn)移給容器或框架。我們最常在面向?qū)ο缶幊痰纳舷挛闹惺褂盟?與傳統(tǒng)編程相比,傳統(tǒng)編程中我

    2024年02月13日
    瀏覽(18)
  • .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ù)庫(kù)鏈接,也可以是一個(gè)文件處理的方法,或者是數(shù)據(jù)處理的一個(gè)過程方法

    2023年04月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包