美文网首页dotNET.NETASP.NET Core见识录
IOC高级玩法-注入多个实现

IOC高级玩法-注入多个实现

作者: Carson_jz | 来源:发表于2019-11-06 22:01 被阅读0次

关于策略模式下需要用到一个接口多个实现的方案

https://www.jianshu.com/p/0753de68244c

此链接是策略模式的案例,讲述多个优惠策略实现同一个接口的应用场景

我们需要用到DI的高级玩法:

在接口定义方法标识

优惠策略接口抽象出一个方法Get() 获取优惠,优惠的实现有很多,我们需要在Startup注入所有的优惠策略的实现

    public interface IActivitiesStrategy
    {
        string Realize { get; }
        /// <summary>
        /// 获取则扣策略
        /// </summary>
        /// <returns></returns>
        double GetDiscountStrategy();
    }

在优惠策略的具体实现上写出方法标识

    public class DoubleElevenActivities : IActivitiesStrategy
    {
        public string Realize => "双十一优惠";

        public double GetDiscountStrategy()
        {
            return 0.11;
        }
    }

    public class DoubleTwelveActivities : IActivitiesStrategy
    {
        public string Realize => "双十二优惠";

        public double GetDiscountStrategy()
        {
            return 0.12;
        }
    }

注册所有方法

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IActivitiesStrategy, DoubleElevenActivities>();
            services.AddTransient<IActivitiesStrategy, DoubleTwelveActivities>();
            services.AddMvc();
        }

在使用时候判断使用什么策略

    public class ValuesController : ControllerBase
    {
        private readonly IEnumerable<IActivitiesStrategy> _activitiesStrategy;

        public ValuesController(IEnumerable<IActivitiesStrategy> activitiesStrategy)
        {
            _activitiesStrategy = activitiesStrategy;
        }

        
        // GET api/values
        [HttpGet]
        public ActionResult<double> Get(string tag)
        {
            var method = _activitiesStrategy.Where(x => x.Realize == tag).FirstOrDefault();

            if (method != null)
            {
                return method.GetDiscountStrategy();
            }

            return 1;
        }
    }

相关文章

  • IOC高级玩法-注入多个实现

    关于策略模式下需要用到一个接口多个实现的方案 https://www.jianshu.com/p/0753de68...

  • Spring笔记

    IOC/DI 1.Xml实现 bean 注入方式 (set注入、构造注入)bean 作用域 (singleton ...

  • Spring5

    IoC 控制反转Ioc(Inversion of Control),是一种设计思想,DI(依赖注入)是实现Ioc的...

  • Spring

    Spring 的模块 1 什么是IOC,什么是依赖注入,Spring IOC 如何实现ans: IOC — Inv...

  • Spring闲谈

    依赖注入(Inverse of Control) Spring 实现IoC(Inverse of Control)...

  • Spring IOC容器

    由于Spring是采用依赖注入(DI)的方式来实现IOC,所以本文将IOC和依赖注入(DI)等同看待,主要讨论依赖...

  • .net 手动实现简易IOC容器

    现在的编程思想,离不开IOC依赖注入,手写实现一个简易IOC容器,更深入理解依赖注入还没了解IOC的可以查阅.ne...

  • 依赖注入

    依赖注入(DI)在PHP中的实现 什么是依赖注入? IOC:英文全称:Inversion of Control,中...

  • 依赖注入--Butterknife深入理解与源码解析

    依赖注入(Dependency Injection)是实现控制反转(IOC -- Inversion of Con...

  • Spring 注入方式

    Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter...

网友评论

    本文标题:IOC高级玩法-注入多个实现

    本文链接:https://www.haomeiwen.com/subject/efbpbctx.html