C# .net mvc 依赖注入、控制反转、Ioc、Autoface(草稿)

C# .net mvc 依赖注入、控制反转、Ioc、Autoface

概念:
控制反转:就是把依赖的创建移到使用这些依赖的类的外部
我想先看下面例子:
FoodServies类中有一个方法EatFood

    public class FoodServies
    {
        public void EatFood()
        {
            Console.WriteLine("吃东西");
        }
    }

Systemdo类中需要调用EatFood,

    public class Systemdo
    {
        FoodServies food;
        //构造函数,实例化的时候调用
        public Systemdo()
        {
            food = new FoodServies();
        }
        public void doSomething()
        {
            food.EatFood();
        }
    }

Systemdo依赖FoodServies类,当一个组件依赖另外一个组件时,我们称其为耦合

为了降低组件直接的耦合程度,一般采用独立但相关的步骤:

1.在两块代码之间引入抽象层,我们通常用的接口。

//在两块代码之间引入抽象层,我们通常用的接口
    public interface IFoodServies
    {
        public void EatFood();
    }

   public class FoodServies : IFoodServies
    {
        public void EatFood()
        {
            Console.WriteLine("吃东西");
        }
    }


    public class Systemdo
    {
        IFoodServies food;
        //构造函数,实例化的时候调用
        public Systemdo()
        {
            food = new FoodServies();
        }
        public void doSomething()
        {
            food.EatFood();
        }
    }

2.把选择抽象实现的责任移到消费类的外部。
需要把FoodServies类的创建移到Systemdo类的外面

把依赖的创建移到使用这些依赖的类的外部,这称为控制反转模式,之所以这样命名,是因为反转的是依赖的创建,正因为如此,才消除了消费者类对依赖创建的控制。

实现

1.服务定位器(不推荐)

 public interface IFoodServiesLocator
    {
        object GetFoodServies(Type servicrType);

    }
    public static class ServiesLocatorExtensions
    {

        public static TService GetFoodServies<TService>(this IFoodServiesLocator locator)
        {
            return (TService)locator.GetFoodServies(typeof(TService));
        }
    }
public interface IFoodServies
    {
         void EatFood();
    }
  public class FoodServies : IFoodServies
    {
        public void EatFood()
        {
            Console.WriteLine("吃东西");
        }
    }
 public class Systemdo
    {
        IFoodServies food;
        //
        public Systemdo(IFoodServiesLocator locator)
        {
            food = locator.GetFoodServies<IFoodServies>();
        }
        public void doSomething()
        {
            food.EatFood();
        }
    }

调用

这里写代码片
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值