.Net Core簡單使用Mvc內(nèi)置的Ioc
本文基于 .NET Core 2.0。
鑒于網(wǎng)上的文章理論較多,鄙人不才,想整理一份 Hello World(Demo)版的文章。
目錄
場景一:簡單類的使用
場景二:包含接口類的使用
場景三:涉及引用類庫的使用
場景一:簡單類的使用
類 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() 方法中進行注冊才能使用,這里提供了三種方法,可以選擇自己喜歡的方式進行注冊。
//方法一 services.AddSingleton(typeof(DemoService), new DemoService()); //方法二 services.AddSingleton(typeof(DemoService)); //方法三 services.AddSingleton<DemoService>();

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

IOC 的容器目前有三種生命周期 Transient、Scoped 和 Singleton,使用方式大致相同,具體差異不在這里進行敘述:
//范例 services.AddTransient(typeof(DemoService)); services.AddScoped<DemoService>();
場景二:包含接口類的使用
接口 IDemo2Service.cs:
public interface IDemo2Service
{
string Test();
}
接口實現(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)新增的注冊方法如下(可選其一):
//方法一 services.AddSingleton(typeof(IDemo2Service), new Demo2Service()); //方法二 services.AddSingleton(typeof(IDemo2Service), typeof(Demo2Service)); //方法三 services.AddSingleton<IDemo2Service, Demo2Service>();

輸出結(jié)果正常:

場景三:涉及引用類庫的使用
我們先新增一個用于標識作用的接口 IServiceSupport.cs,該接口沒有包含方法,只是一個標識作用,有點類似 DDD 的聚合根接口 IAggregateRoot:
public interface IServiceSupport
{
}
接口 IDemo3Service.cs
public interface IDemo3Service
{
string Test();
}
接口實現(xiàn) Demo3Service.cs
public class Demo3Service : IDemo3Service
{
public string Test()
{
return Guid.NewGuid().ToString();
}
}
這次我們統(tǒng)一編寫一個方法將該類庫下的所有接口和實現(xiàn)進行注冊:
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);
}
}
}
因為使用了反射,所以需要 using System.Reflection;
這次我們在 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é)果便會如圖所示:

為什么會出現(xiàn)上圖的情況呢?因為小編忘記把接口 IDemo3Service 繼承自接口 IServiceSupport 了,接下來我們只需要做出一個繼承的編寫操作即可:

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

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

