对象——接口——依赖注入

对象:你懂的(DAL b=new DAL();)

接口:你懂的(IDAL d=new DAL();)

依赖注入:先放上大神解释链接依赖注入和控制反转

当某个角色(可能是一个实例,调用者)需要另一个角色(另一个实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入

  • 软件工程设计原则:高内聚低耦合
  • 第三者作用:解耦合
  • 解耦合:作为小小白深奥的也不懂,就是减少模块依赖性,提高程序的独立性以便修改吧,反正要用,学会怎么用不就行了

相比于Java网上有超多大神指点,作为稀缺的.net选手我为大家推荐做一下这个实验来了解一下.net中依赖注入这种思想的用法:Asp.Net MVC+EF+三层架构的完整搭建过程

大致使用方式:

1.定义注册类

using Autofac;
using department.BLL;
using department.IBLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace department.BLLContainer
{
    public class Container
    {

        /// <summary>
        /// IOC 容器
        /// </summary>
        public static IContainer container = null;

        /// <summary>
        /// 获取 IDal 的实例化对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T Resolve<T>()
        {
            try
            {
                if (container == null)
                {
                    Initialise();
                }
            }
            catch (System.Exception ex)
            {
                throw new System.Exception("IOC实例化出错!" + ex.Message);
            }

            return container.Resolve<T>();
        }

        /// <summary>
        /// 初始化
        /// </summary>
        public static void Initialise()
        {
            var builder = new ContainerBuilder();
            //格式:builder.RegisterType<xxxx>().As<Ixxxx>().InstancePerLifetimeScope();
            builder.RegisterType<StaffService>().As<IStaffService>().InstancePerLifetimeScope();
            container = builder.Build();
        }
    }
}

2.调用:

using departemnt.IDAL;
using department.IBLL;
using department.Model;


namespace department.BLL
{
    public partial class StaffService : BaseService<departments>, IStaffService
    {
        private IStaffDAL StaffDAL = DALContainer.Container.Resolve<IStaffDAL>();
        //
        public override void SetDal()
        {
            Dal = StaffDAL;
        }
    }
}

其中并不是直接使用对象或接口,而是将对象注册为接口(代码直译,本人理解,有错勿怪)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是来拉屎的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值