• 十二个 ASP.NET Core 例子——IOC


      目录

    1. 简单介绍
    2. core自带IOC的实现解释

      1.简单介绍 (个人理解)

      是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了

      怎么用:和IOC容器说你这次要哪些类别的类,要用的时候和IOC容器说,IOC容器给你创造出来这个类然后给你[注入和注册]

      实现原理:反射和工厂

      依赖原则

        A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

        B.抽象不应该依赖于具体,具体应该依赖于抽象。

      注意点:core自带的IOC容器不支持属性注入

      2.core自带IOC的实现解释

         这里先实现运行起来看看,再解释细节.

         a.创建好自己流程中需要实现的哪些类 

        public interface IGuidService
        {
            Guid GetID();
        }
    
        public interface INewAlwaysGuidService :IGuidService
        {
            
        }
        public interface INewGuidService : IGuidService
        {
    
        }
        public interface IInstanceGuidService : IGuidService
        {
    
        }
    
        public class NewAlwaysGuidService : INewAlwaysGuidService
        {
            public NewAlwaysGuidService()
            {
                ID =Guid.NewGuid();
            }
    
            public Guid ID;
            public Guid GetID()
            {
                return ID;
            }
        }
        public class NewGuidService : INewGuidService
        {
            public NewGuidService()
            {
                ID = Guid.NewGuid();
            }
            public Guid ID;
            public Guid GetID()
            {
                return ID;
            }
        }
        public class InstanceGuidService : IInstanceGuidService
        {
            public InstanceGuidService()
            {
                ID = Guid.NewGuid();
            }
            public Guid ID;
            public Guid GetID()
            {
                return ID;
            }
        }
    View Code

      b.根据自己构思好的流程,先和IOC说你要什么类,注册下

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddTransient<INewAlwaysGuidService, NewAlwaysGuidService>();
                services.AddScoped<INewGuidService, NewGuidService>();
                services.AddSingleton<IInstanceGuidService, InstanceGuidService>();
                // Add framework services.
                services.AddMvc(options =>
                {
                    //options.Filters.Add(new MyActionFilter());
    
                });
            }
    View Code

      c.和IOC说我要哪些类,IOC容器创造好给你

        public class HomeController : Controller
        {
            private INewAlwaysGuidService _newAlwaysGuidService;
            private INewGuidService _newGuidService;
            private IInstanceGuidService _instanceGuidService;
    
            public HomeController(INewAlwaysGuidService a, INewGuidService b, IInstanceGuidService c)
            {
                _newAlwaysGuidService = a;
                _newGuidService = b;
                _instanceGuidService = c;
            }
    
            public IActionResult Index()
            {
                return new ContentResult{Content=$"{_newAlwaysGuidService.GetID()}
    {_newGuidService.GetID()}
    {_instanceGuidService.GetID()}
    " };
            }
        }
    View Code

         在注册的时候会发现有三种不同的方法解释下

    Transient 每次都重新创建一个实例。
    Singleton 创建一个单例,以后每次调用的时候都返回该单例对象。
    Scoped 在当前作用域内,不管调用多少次,都是一个实例,换了作用域就会再次创建实例,类似于特定作用内的单例。

      每次刷新页面你会看到除了singleton的guid,其他变了.

      在注入的时候是构造函数注入,也有属性注入,方法注入等方法.但是core是不支持属性注入了.

  • 相关阅读:
    国内最火的3款前端开发框架
    Cordova是做什么的
    老师你好。使用cordova生成的hellowold 的安卓5.0版本太高。怎么才可以生成4.4的呢?
    一个类似bootstrap的foundation
    role在标签中的作用是什么?
    如何做到根据不同的进度用不同的颜色显示整个进度条
    wall 和panel有啥区别
    git ignore
    eclipse js 引用跳转
    计划
  • 原文地址:https://www.cnblogs.com/TeemoHQ/p/6879245.html
Copyright © 2020-2023  润新知