IOC:AutoFac使用demo
使用autofac 实现依赖注入
1.引用 autofac.dll 和 autofac.configuration.dll
2.新增接口 IDAL
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AutoFacTest { public interface IDAL { void select(string msg); } }
2.新增 SqlserverDAL 类和 OracleDAL类,并继承IDAL
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AutoFacTest { public class SqlServerDAL:IDAL { public void select(string msg) { Console.WriteLine("this is sqlserver:"+msg); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AutoFacTest { public class OracleDAL:IDAL { public void select(string msg) { Console.WriteLine("this is Oracle:" + msg); } } }
3. 在程序里直接实现IOC注入
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autofac; namespace AutoFacTest { class Program { static void Main(string[] args) { // //直接指定实例类型 var builder = new ContainerBuilder(); builder.RegisterType<IDAL>(); builder.RegisterType<OracleDAL>().As<IDAL>(); using (var container = builder.Build()) { var manager=container.Resolve<IDAL>(); manager.select("小xiaoniao"); } Console.ReadLine(); } } }
4.也可以通过引用Autofac.Configuration.dll 来配置 App.config或Web.config 配置文件注入
如下:
<configuration> <configSections> <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/> </configSections> <autofac defaultAssembly="AutoFacTest"> <components> <component type="AutoFacTest.OracleDAL, AutoFacTest" service="AutoFacTest.IDAL" /> </components> </autofac>
5. 实现直接注入和通过配置文件注入
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;
using Autofac.Configuration;
namespace AutoFacTest
{
class Program
{
static void Main(string[] args)
{
test1();//直接注入
test2();//配置文件注入
Console.ReadLine();
}
/// <summary>
/// 直接注入
/// </summary>
private static void test1()
{
// //直接指定实例类型
var builder = new ContainerBuilder();
builder.RegisterType<IDAL>();
builder.RegisterType<OracleDAL>().As<IDAL>();
using (var container = builder.Build())
{
var manager = container.Resolve<IDAL>();
manager.select("直接注入,小xiaoniao");
}
}
/// <summary>
/// 配置文件注入
/// </summary>
private static void test2()
{
// //直接指定实例类型
var builder = new ContainerBuilder();
builder.RegisterType<IDAL>();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
using (var container = builder.Build())
{
var manager = container.Resolve<IDAL>();
manager.select("配置文件注入,小xiaoniao");
}
}
}
}
直接注入显示结果:this is Oracle:小xiaoniao
将 builder.RegisterType<OracleDAL>().As<IDAL>(); 改成 builder.RegisterType<SqlserverDAL>().As<IDAL>(); 则会显示:this is sqlserver:小xiaoniao
直接注入和配置文件注入显示:
this is Oracle:直接注入,小xiaoniao
this is Oracle:配置文件注入,小xiaoniao
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通