对象:你懂的(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;
}
}
}
其中并不是直接使用对象或接口,而是将对象注册为接口(代码直译,本人理解,有错勿怪)