在控制台进行依赖注入(DI in Console)
首先我们准备两个服务接口
public interface IServiceA
{
void showConsole();
int GetValue(int val);
}
public interface IServiceB
{
void DoWork();
string ShowName();
}
接着我们分别实现两个接口
public class ServiceA : IServiceA
{
private IServiceB _serviceB { get; }
public ServiceA(IServiceB serviceB)
{
_serviceB = serviceB;
} public int GetValue(int val)
{
return val;
} public void showConsole()
{
_serviceB.ShowName();
}
}
class ServiceB : IServiceB
{
private Microsoft.Extensions.Logging.ILogger _log { get; } public ServiceB(ILogger<ServiceB> logger)
{
_log = logger;
}
public void DoWork()
{
_log.LogInformation($" I am doing work ");
}
public string ShowName()
{
_log.LogInformation($" At Time :{DateTime.Now.ToString()} 被调用");
return "I am ServiceB ";
}
}
在主函数中这么写
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging()
.AddTransient<IServiceB, ServiceB>()
.AddTransient<IServiceA, ServiceA>()
.BuildServiceProvider(); serviceProvider.GetService<ILoggerFactory>().AddConsole(LogLevel.Debug);
var Logger = serviceProvider
.GetService<ILoggerFactory>()
.CreateLogger<Program>();
Logger.LogDebug("Starting Program");
var serviceB = serviceProvider.GetService<IServiceB>();
serviceB.DoWork();
var serviceA = serviceProvider.GetService<IServiceA>();
var k = serviceA.GetValue(12345);
Console.WriteLine(k);
serviceA.showConsole();
Logger.LogInformation("All Done ");
Console.ReadLine();
}
提示需要引入的Nuget包
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.2" />
</ItemGroup>
运行结果:
在控制台进行依赖注入(DI in Console)的更多相关文章
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 “Inversion of Control”.依赖注入DI, 全称 “Dependency Injection”. 面向的问题:软件开发中,为了降低模块间.类间的耦合度,提倡基 ...
- MVC进阶之路:依赖注入(Di)和Ninject
MVC进阶之路:依赖注入(Di)和Ninject 0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类, ...
- 依赖注入(DI)和Ninject
[ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 本文目录: 1.为什么需要依赖注入 2.什么是依赖注入 3.使用NuGet安装库 4.使用Ninject的一般步骤 5. ...
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- 个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解
一.依赖倒置(Dependency Inversion Principle) 依赖倒置是面向对象设计领域的一种软件设计原则.(其他的设计原则还有:单一职责原则.开放封闭原则.里式替换原则.接口分离原则 ...
- 20181123_控制反转(IOC)和依赖注入(DI)
一. 控制反转和依赖注入: 控制反转的前提, 是依赖倒置原则, 系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖 (依赖抽象,而不是细节) 如果要想做到控制反转(IOC), 就必须要使 ...
- [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...
- 浅析“依赖注入(DI)/控制反转(IOC)”的实现思路
开始学习Spring的时候,对依赖注入(DI)——也叫控制反转(IOC)—— 的理解不是很深刻.随着学习的深入,也逐渐有了自己的认识,在此记录,也希望能帮助其他入门同学更深入地理解Spring.本文不 ...
- 依赖注入(DI)和Ninject,Ninject
我们所需要的是,在一个类内部,不通过创建对象的实例而能够获得某个实现了公开接口的对象的引用.这种“需要”,就称为DI(依赖注入,Dependency Injection),和所谓的IoC(控制反转,I ...
- 控制反转IOC与依赖注入DI
理解 IOC http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html IOC 相关实例 的http:// ...
随机推荐
- [国嵌攻略][136][DM9000网卡驱动深度分析]
网卡初始化 1.分配描述结构,alloc_etherdev 2.获取平台资源,platform_get_resource 2.1.在s3c_dm9k_resource中有相关的资源 2.2.add地址 ...
- HTML表单属性集合
- 从零开始学习前端JAVASCRIPT — 6、JavaScript基础DOM
1:DOM(Document Object Model)的概念和作用 document对象是DOM核心对象:对html中的内容,属性,样式进行操作. 节点树中节点之间的关系:父子,兄弟. 2:DO ...
- Idea Maven创建Web项目
1.创建Maven项目 1.1File->New->Project 1.2填写GroupId和ArtifactId 1.3直接Finish,然后等一会,等Maven加载完 完成以后的项目结 ...
- 【开发技术】如何查看项目中struts的版本
struts-configer.xml(struts1)或struts.xml(struts2)中 struts-2.0.dtd处表示版本号
- git分支小问题
参考网址:http://hbiao68.iteye.com/blog/2055493 1.查看分支 git branch 或者 git branch -v 2.创建一个新的分支 git branch ...
- Spring学习之路一
Spring 官网:http://projects.spring.io/spring-framework/ Spring下载地址:https://repo.spring.io/simple/libs- ...
- P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- mmap 测试的一些坑
最近遇到一个mmap的问题,然后为了测试该问题,写了如下测试代码: #include <sys/mman.h> #include <sys/stat.h> #include & ...
- Angular19 自定义表单控件
1 需求 当开发者需要一个特定的表单控件时就需要自己开发一个和默认提供的表单控件用法相似的控件来作为表单控件:自定义的表单控件必须考虑模型和视图之间的数据怎么进行交互 2 官方文档 -> 点击前 ...