web API .net - .net core 对比学习-依赖注入
今天我们来看一下 .net web api 和 .net core web api依赖注入机制的差异。
首先我们分别在.net web api 和 .net core web api新建文件夹Service并增加IValueService 接口和它的实现类ValueService.

然后我们在ValueController 里面分别添加Service 字段,并加上新的构造方法:
.net web api controller的代码如下:
using FreWebApi.Service;
using System.Collections.Generic;
using System.Web.Http; namespace FreWebApi.Controllers
{
public class ValuesController : ApiController
{
private IValueService valueService;
public ValuesController(IValueService valueService)
{
this.valueService = valueService;
} // GET api/values
public IEnumerable<string> Get()
{
return valueService.GetValues();
}
}
}
.net core web api controller的代码如下:
using System.Collections.Generic;
using CoreWebApi.services;
using Microsoft.AspNetCore.Mvc; namespace CoreWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private IValueService valueService;
public ValuesController(IValueService valueService)
{
this.valueService = valueService;
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return valueService.GetValues();
}
}
}
看到这里我们并没有看到有什么不同,下面我们将为controller里面的service 添加依赖注入。
在.net core中我们在Startup 类的ConfigureServices service方法里面添加依赖注入的配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(
options =>
{
options.Filters.Add(typeof(HandleExceptionAttribute), ); // an instance
}
).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddTransient(typeof(IValueService), typeof(ValueService));
//services.AddTransient<IValueService>();
//services.AddTransient(typeof(ValueService));
//services.AddTransient<IValueService, ValueService>();
//services.AddTransient(typeof(IValueService), service => new ValueService());
}
对于 .net 我们使用autoFac 做依赖注入,首先我们打开项目的Nuget管理,添加autoFac的包:

然后我们在App_Start文件夹下添加类AutoFacConfig:
代码如下:
using System;
using System.Reflection;
using System.Web.Http;
using Autofac;
using Autofac.Integration.WebApi;
using FreWebApi.Service; namespace FreWebApi
{
public class AutoFacConfig
{
public static void Run()
{
SetAutoFacConfig();
} private static void SetAutoFacConfig()
{
ContainerBuilder builder = new ContainerBuilder();
HttpConfiguration config = GlobalConfiguration.Configuration;
// Register API controllers using assembly scanning.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<ValueService>().As<IValueService>()
.SingleInstance();
var container = builder.Build();
// Set the WebApi dependency resolver.
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
}
这个时候我们的,net web的Api的配置也就完成了。
本文旨在比较.net web api 和 .net core web api 在依赖注入配置和写法上的差异,所以没有涉及到依赖注入对象生命周期的研究,有兴趣的同学可以查看其他原因的帖子加以了解。
web API .net - .net core 对比学习-依赖注入的更多相关文章
- web API .net - .net core 对比学习-使用Swagger
根据前两篇的介绍,我们知道.net web api 和 .net core web api在配置方面的不同如下: 1. .net web api的配置是在 App_Stat文件夹里面添加对应的配置类, ...
- web API .net - .net core 对比学习-文件目录概述
个人正在学习.net web Api的相关知识,因此用这一系列博客做一记录. 1. 首先我们分别创建 .net web api 项目和 .net core web api 项目. 2. 我们首先比较一 ...
- ASP.NET Web API 中的返回数据格式以及依赖注入
本篇涉及ASP.NET Web API中的返回数据合适和依赖注入. 获取数据 public IEnumerable<Food> Get() { var results = reop.Get ...
- Net core学习系列(三)——Net Core中的依赖注入
本文通过一个维修工与工具库的例子形象的描述一下为什么要用依赖注入.它的工作原理是什么样的, 然后根据这个类比一下ASP.NET Core 中的依赖注入, 从而深刻了解它的使用方法.注意事项以及回收机制 ...
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...
- 深入理解net core中的依赖注入、Singleton、Scoped、Transient(一)
相关文章: 深入理解net core中的依赖注入.Singleton.Scoped.Transient(一) 深入理解net core中的依赖注入.Singleton.Scoped.Transient ...
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源, ...
- ASP.NET Core 中的 依赖注入介绍
ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们已经可以正确是使用这些与依赖注入相关的API了.如果你还 ...
随机推荐
- Hadoop(二)—— HDFS
HDFS(Hadoop Distributed File System)Hadoop分布式文件系统. 一.HDFS产生的背景 随着数据量越来越大,如果大到一台主机的磁盘都存放不下,该如何解决这个问题. ...
- 第05组Alpha冲刺(1/4)
队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了哪些任务:SVN管理工具搭建 展示G ...
- uniapp - 关于调试跨域
[] 1.右键Chrome图标 2.选中属性(R) 3.在目标(T) chrome.exe后添加 --disable-web-security --user-data-dir --allow-runn ...
- THOR: Tracking Holistic Object Representations
THOR: Tracking Holistic Object Representations BMVC 2019 Oral 2019-08-04 10:30:09 Paper: https://arx ...
- linux 命令 文件数量统计
# 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 ls ...
- Linux中mpstat命令参数详解
Linux中mpstat命令参数详解 mpstat 是 Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在 /proc/stat ...
- 顶部导航TabBar、TabBarView、DefaultTabController
原文地址:https://www.cnblogs.com/upwgh/p/11369537.html TabBar:Tab页的选项组件,默认为水平排列. TabBarView:Tab页的内容容器,Ta ...
- Appium脚本(2):元素检测
场景: 有的按钮在第一次打开时显示,之后就不显示了,如更新提示.特性介绍等,面对这样的场景写了如下脚本,增加脚本的复用性. no_element_exception_2.py from appium ...
- 利用Idea查看类的继承关系图
1.将光标定位到你想查看的类,点击右键,选择 Diagrams,其中有 show 和 show ... Popup,只是前者新建在标签页内,后者以浮窗的形式展示 可得,如下图所示. 查看图中的Appl ...
- FineUI window弹层设置
需在页面先设置 <f:Window ID="Window1" runat="server" Height="600px" Widt ...