.Net Core简单使用Mvc内置的Ioc
本文基于 .net core 2.0。
鉴于网上的文章理论较多,鄙人不才,想整理一份 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>();
执行输出结果,正常:
ioc 的容器目前有三种生命周期 transient、scoped 和 singleton,使用方式大致相同,具体差异不在这里进行叙述:
//范例 services.addtransient(typeof(demoservice)); services.addscoped<demoservice>();
场景二:包含接口类的使用
接口 idemo2service.cs:
public interface idemo2service { string test(); }
接口实现 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() 方法内新增的注册方法如下(可选其一):
//方法一 services.addsingleton(typeof(idemo2service), new demo2service()); //方法二 services.addsingleton(typeof(idemo2service), typeof(demo2service)); //方法三 services.addsingleton<idemo2service, demo2service>();
输出结果正常:
场景三:涉及引用类库的使用
我们先新增一个用于标识作用的接口 iservicesupport.cs,该接口没有包含方法,只是一个标识作用,有点类似 ddd 的聚合根接口 iaggregateroot:
public interface iservicesupport { }
接口 idemo3service.cs
public interface idemo3service { string test(); }
接口实现 demo3service.cs
public class demo3service : idemo3service { public string test() { return guid.newguid().tostring(); } }
这次我们统一编写一个方法将该类库下的所有接口和实现进行注册:
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;
如果注入失败,执行结果便会如图所示:
为什么会出现上图的情况呢?因为小编忘记把接口 idemo3service 继承自接口 iservicesupport 了,接下来我们只需要做出一个继承的编写操作即可:
再次执行启动,结果便如你所料:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: PHP连接sftp并下载文件的方法教程
推荐阅读
-
在.NET Core 3.0中的WPF中使用IOC图文教程
-
.Net Core简单使用Mvc内置的Ioc
-
.Net Core简单使用Mvc内置的Ioc(续)
-
使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
-
.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器
-
[.Net Core] 在 Mvc 中简单使用日志组件
-
.NET Core 3.0中WPF使用IOC的图文教程
-
.Net Core WebApi的简单创建以及使用方法
-
使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
-
使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目