.Net Core簡單使用Mvc內(nèi)置的Ioc
本文基于 .NET Core 2.0。
鑒于網(wǎng)上的文章理論較多,鄙人不才,想整理一份 Hello World(Demo)版的文章。
目錄
場(chǎng)景一:簡單類的使用
場(chǎng)景二:包含接口類的使用
場(chǎng)景三:涉及引用類庫的使用
場(chǎng)景一:簡單類的使用
類 DemoService.cs:
public class DemoService
{
public string Test()
{
return Guid.NewGuid().ToString();
}
}
控制器 DemoController.cs:
public class DemoController : Controller
{
private readonly DemoService _demoService;
public DemoController(DemoService demoService)
{
_demoService = demoService;
}
public IActionResult Index()
{
return Json(_demoService.Test());
}
}
需要先在 Startup.cs 下的 ConfigureServices() 方法中進(jìn)行注冊(cè)才能使用,這里提供了三種方法,可以選擇自己喜歡的方式進(jìn)行注冊(cè)。
//方法一 services.AddSingleton(typeof(DemoService), new DemoService()); //方法二 services.AddSingleton(typeof(DemoService)); //方法三 services.AddSingleton<DemoService>();

執(zhí)行輸出結(jié)果,正常:

IOC 的容器目前有三種生命周期 Transient、Scoped 和 Singleton,使用方式大致相同,具體差異不在這里進(jìn)行敘述:
//范例 services.AddTransient(typeof(DemoService)); services.AddScoped<DemoService>();
場(chǎng)景二:包含接口類的使用
接口 IDemo2Service.cs:
public interface IDemo2Service
{
string Test();
}
接口實(shí)現(xiàn) Demo2Service.cs:
public class Demo2Service : IDemo2Service
{
public string Test()
{
return Guid.NewGuid().ToString();
}
}
控制器 Demo2Controller.cs:
public class Demo2Controller : Controller
{
private readonly IDemo2Service _demoService;
public Demo2Controller(IDemo2Service demoService)
{
_demoService = demoService;
}
public IActionResult Index()
{
return Json(_demoService.Test());
}
}
目前需要在類 Startup.cs 中的 ConfigureServices() 方法內(nèi)新增的注冊(cè)方法如下(可選其一):
//方法一 services.AddSingleton(typeof(IDemo2Service), new Demo2Service()); //方法二 services.AddSingleton(typeof(IDemo2Service), typeof(Demo2Service)); //方法三 services.AddSingleton<IDemo2Service, Demo2Service>();

輸出結(jié)果正常:

場(chǎng)景三:涉及引用類庫的使用
我們先新增一個(gè)用于標(biāo)識(shí)作用的接口 IServiceSupport.cs,該接口沒有包含方法,只是一個(gè)標(biāo)識(shí)作用,有點(diǎn)類似 DDD 的聚合根接口 IAggregateRoot:
public interface IServiceSupport
{
}
接口 IDemo3Service.cs
public interface IDemo3Service
{
string Test();
}
接口實(shí)現(xiàn) Demo3Service.cs
public class Demo3Service : IDemo3Service
{
public string Test()
{
return Guid.NewGuid().ToString();
}
}
這次我們統(tǒng)一編寫一個(gè)方法將該類庫下的所有接口和實(shí)現(xiàn)進(jìn)行注冊(cè):
private static void AddSingletonServices(IServiceCollection services)
{
var asm = Assembly.Load(new AssemblyName("IocCoreDemo.Services"));
var serviceTypes = asm.GetTypes()
.Where(x => typeof(IServiceSupport).IsAssignableFrom(x) && !x.GetTypeInfo().IsAbstract);
foreach (var serviceType in serviceTypes)
{
foreach (var serviceInterface in serviceType.GetInterfaces())
{
services.AddSingleton(serviceInterface, serviceType);
}
}
}
因?yàn)槭褂昧朔瓷?,所以需?using System.Reflection;
這次我們?cè)?Startup.cs 類中添加和修改的方法如圖所示:

Startup.cs 類中使用的有效命名空間如下:
using IocCoreDemo.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Linq; using System.Reflection;
如果注入失敗,執(zhí)行結(jié)果便會(huì)如圖所示:

為什么會(huì)出現(xiàn)上圖的情況呢?因?yàn)樾【幫洶呀涌?IDemo3Service 繼承自接口 IServiceSupport 了,接下來我們只需要做出一個(gè)繼承的編寫操作即可:

再次執(zhí)行啟動(dòng),結(jié)果便如你所料:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后臺(tái)管理系統(tǒng)之前端頁面框架構(gòu)建源碼分享
- asp.net CommunityServer中的wwwStatus
- .Net Core簡單使用Mvc內(nèi)置的Ioc(續(xù))
- Spring.Net控制反轉(zhuǎn)IoC入門使用
- ASP.NET Core應(yīng)用中與第三方IoC/DI框架的整合
- MVC使用Spring.Net應(yīng)用IOC(依賴倒置)學(xué)習(xí)筆記3
- .net MVC使用IPrincipal進(jìn)行Form登錄即權(quán)限驗(yàn)證(3)
- .net MVC使用Session驗(yàn)證用戶登錄(4)
- .NET Unity IOC框架使用實(shí)例詳解
相關(guān)文章
.Net Core導(dǎo)入千萬級(jí)數(shù)據(jù)至Mysql數(shù)據(jù)庫的實(shí)現(xiàn)方法
今天我們談?wù)凪ySQL怎么高性能插入千萬級(jí)的數(shù)據(jù)的,討論這個(gè)問題牽扯到一個(gè)數(shù)據(jù)遷移功能,高性能的插入數(shù)據(jù),接下來通過本文給大家分享幾種實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2021-05-05
WPF集合控件實(shí)現(xiàn)分隔符(ItemsControl Separator)
這篇文章主要為大家詳細(xì)介紹了WPF集合控件實(shí)現(xiàn)分隔符ItemsControl Separator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
ASP.NET Core MVC學(xué)習(xí)教程之路由(Routing)
這篇文章主要給大家介紹了關(guān)于ASP.NET Core MVC學(xué)習(xí)教程之路由(Routing)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
獲取創(chuàng)建Membership的數(shù)據(jù)庫創(chuàng)建腳本
membership的數(shù)據(jù)庫可以通過aspnet_regsql.exe來配置生成,但是里面的東西,不一定都是我需要的,有時(shí)我也想自定義一些東西。2010-02-02
在ASP.NET中支持?jǐn)帱c(diǎn)續(xù)傳下載大文件(ZT)源碼
這篇文章主要為大家介紹了在ASP.NET中如何做到支持?jǐn)帱c(diǎn)續(xù)傳下載大文件(ZT),需要的朋友可以參考下2014-07-07
asp.net通過HttpModule自動(dòng)在Url地址上添加參數(shù)
由于項(xiàng)目中有許多頁面需要用到cid參數(shù),所以想通過傳值cid來獲取數(shù)據(jù)。2010-01-01
ASP.NET用戶注冊(cè)實(shí)戰(zhàn)(第11節(jié))
這篇文章主要介紹了ASP.NET用戶注冊(cè)實(shí)戰(zhàn),鞏固前10小節(jié)所學(xué)的全部知識(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08

