(4) Mvc Core IOC

  • asp.net mvc core 内置了 IOC 容器,不再需要 autofac 等,当然 autofac 也是支持.net core
    的(http://www.open-open.com/lib/view/open1454127071933.html)。内置 IOC 是通过构
    造函数注入,而不是属性注入.
  • 内置的 IOC 有三种生命周期:
    Transient: Transient 服务在每次被请求时都会被创建。这种生命周期比较适用于轻量级的
    无状态服务。
    Scoped: Scoped 生命周期的服务是每次 web 请求被创建。
    Singleton: Singleton 生命能够周期服务在第一被请求时创建,在后续的每个请求都会使用
    同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和
    生命周期管理,而不是自己来走这些事情。
  • 使用方法:服务注册是在Startup类的ConfigureServices方法你进行注册的。下面举例说明:
public   interface IUserService
    {
        string GetStr();
    }

 public class UserService : IUserService
    {
        public string GetStr()
        {
            return "hello";
        }
    }

 加入我们要以Singleton的方式让IOC容器替我们创建UserService对象,则我们只需要在Startup类的ConfigureServices方法里面调用services.AddSingleton方法

   public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddSingleton(typeof(IUserService), typeof(UserService));//最好 services.AddSingleton(typeof(IMyService),typeof(MyService));因为这样的话可以在 MyService 中通过构造函数注入其他服务
        }

  这样以后,Controller里我们使用UserService这个类的时候,就不需要自己New创建,而是需要的时候有IOC容器帮我们创建。

  public class HomeController : Controller
    {
        private IUserService userService;
        public HomeController(IUserService _userService)
        {
            userService = _userService;
        }
        public IActionResult Index()
        {
            string connStr = userService.GetStr();
            //return View();
            return Content(connStr);
        }
    }

 实际项目中,我们会写许多的接口,这个时候可以通过放射的方式注入服务接口

var serviceAsm = Assembly.Load(new AssemblyName("CoreProj.Service"));
foreach(Type serviceType in serviceAsm.GetTypes()
.Where(t=>typeof(IServiceTag).IsAssignableFrom(t)&&!t.GetTypeInfo().IsAbstract))
{
var interfaceTypes = serviceType.GetInterfaces();
foreach(var interfaceType in interfaceTypes)
{
services.AddSingleton(interfaceType, serviceType);
}
}

  

时间: 2024-11-01 10:50:49

(4) Mvc Core IOC的相关文章

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2)

前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接口,利用系统权限管理接口,对每个接口进行授权(管理接口为选读部分,因为你需要阅读最开始权限管理部分(18-27节),才能阅读这部分) 开发环境: V

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表 这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板 我们只能通过一些方式来使用rdl报表. Razor视图不支持asp.net服务器控件,但是aspx可以,所以用户其实可以通过aspx视图模版来显示rdl报表或者水晶报表. 我是有强迫症的人,我不喜欢在众多razor视图中,让aspx视图鹤立鸡群,所以这节主要

ASP.NET MVC学习---(五)MVC初体验

经过之前n多的铺垫 我们已经大概了解了这个姓m名vc的家伙了 那么今天我们就来体验一把 怎么体验呢? 就来做一个小例子吧~ mvc增删改查的例子 数据库还是之前我们的老朋友 关系图: 表中的数据已填好 T_Users 将就着用着吧,哈哈 现在要求对T_Users表进行增删改查 开搞~ 回到之前新建的mvc项目 在Controllers文件夹下新建一个名为Home的空控制器 当浏览器请求Home下面的Index方法的时候返回什么? 当然是主页面啦 这里我们的主页面就是显示T_Users数据列表 代

Spring(02)重新认识 IoC

目录 Spring(02)重新认识 IoC 1. IoC 发展简介 2. IoC 主要实现策略 3. IoC 容器的职责 4. IoC 容器的实现 5. 传统 IoC 容器实现 6. 轻量级 IoC 容器 7. 依赖查找VS. 依赖注入 8. 构造器注入 VS. Setter 注入 9. 面试题精选 Spring(02)重新认识 IoC 1. IoC 发展简介 1983年,Richard E. Sweet 在<The Mesa Programming Environment>中提出 "

Spring学习总结(一)——Spring实现IoC的多种方式

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了. IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现Io

Spring MVC 学习总结(一)——MVC概要与环境配置

一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合.MVC不是一种设计模式,MVC是一种架构模式.当然不同的MVC存在差异. 在web早期的开发中,通常采用的都是Model1.Model1中,如图所示主要分为两层,视图层和模型层.Model2把一个项目分成三部分,包括视图.控制.模型.这样不仅提高的代码的复用率与项目的扩展性,且大大

Spring MVC (一)——MVC概要与环境配置

一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合.MVC不是一种设计模式,MVC是一种架构模式.当然不同的MVC存在差异. 二.Spring MVC介绍 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架.Spring MVC的特点:1.轻量2.高效3.与Spring兼容性好

(转)MVC设计模式学习总结

原文  : chenchun的博客 http://www.cnblogs.com/jobscn/archive/2011/11/08/2240725.html ------------------------------ 随着Web应用的商业逻辑包含逐渐复杂的公式分析计算.决策支持等,使客户机越 来越不堪重负,因此将系统的商业分离出来.单独形成一部分,这样三层结构产生了. 其中‘层’是逻辑上的划分. 三层体系结构是将整个系统划分为如图2.1所示的结构[3]  (1)表现层(Presentatio

(译文)MVC通用仓储类

Generic Repository Pattern MVC Generic Repository Pattern MVC 原文链接:http://www.codeproject.com/Articles/1095323/Generic-Repository-Pattern-MVC 良好的架构师任何项目的核心,开发人员一直在寻找一个牛X的架构,它能减少重复代码,分离数据访问与业务逻辑.因此,我们需要在MVC中使用EF创建一个泛型仓储类.如果不了解EF,去这里学习.在开始之前,我们需要了解什么是仓