Autofac多种注册方式

接口与实现关系图

1.简单使用

// 创建容器
ContainerBuilder containerBuilder = new ContainerBuilder();
// 注册抽象与具体实现
containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
// 构建容器Build
IContainer container = containerBuilder.Build();
// 获取对象
IHeadphone? headphone = container.Resolve<IHeadphone>();

2.使用实例注册

ContainerBuilder containerBuilder = new ContainerBuilder();
Headphone headphone1 = new Headphone();
containerBuilder.RegisterInstance(headphone1);
IContainer container = containerBuilder.Build();
IHeadphone? headphone = container.Resolve<Headphone>();
headphone.testHeadPhone();
Console.WriteLine(object.ReferenceEquals(headphone1, headphone)); // True

3.可以注册一段创建对象的业务逻辑

IPower power1 = null;
IPower power2 = null;
ContainerBuilder containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
containerBuilder.Register<IPower>(context =>
{
    IMicrophone microphone = context.Resolve<IMicrophone>();
    power1 = new Power(microphone);

    return power1;
});
IContainer container = containerBuilder.Build();
power2 = container.Resolve<IPower>();

Console.WriteLine(object.ReferenceEquals(power1,power2));

4.注册泛型

ContainerBuilder containerBuilder = new ContainerBuilder();

containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
containerBuilder.RegisterGeneric(typeof(List<>)).As(typeof(List<>));

IContainer container = containerBuilder.Build();
List<IHeadphone> resolve = container.Resolve<List<IHeadphone>>();
Console.WriteLine(resolve);

5.可以把Type类型作为注册的类型

ContainerBuilder containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType(typeof(Headphone)).As(typeof(IHeadphone));
IContainer container = containerBuilder.Build();
IHeadphone headphone = container.Resolve<IHeadphone>();
headphone.TestHeadPhone();

6.可以注册程序集

ContainerBuilder containerBuilder = new ContainerBuilder();
Assembly assemblyInterface = Assembly.LoadFrom("Zhaoxi.IOC.Interfaces.dll");
Assembly assemblyService = Assembly.LoadFrom("Zhaoxi.IOC.Services.dll");
containerBuilder.RegisterAssemblyTypes(assemblyInterface, assemblyService).AsImplementedInterfaces(); // 在程序集中找出抽象与具体的对应关系
IContainer container = containerBuilder.Build();
IPower resolve = container.Resolve<IPower>();

7.单个抽象多个实现 这种情况会后面注册的覆盖前面的

ContainerBuilder containerBuilder = new ContainerBuilder();

/*containerBuilder.RegisterType<AndroidPhone>().As<IPhone>();
containerBuilder.RegisterType<ApplePhone>().As<IPhone>();*/
// 第一种
/*containerBuilder.RegisterType<AndroidPhone>().Named<IPhone>("AndroidPhone");
containerBuilder.RegisterType<ApplePhone>().Named<IPhone>("ApplePhone");
IContainer container = containerBuilder.Build();
IPhone resolve = container.ResolveNamed<IPhone>("AndroidPhone",new NamedParameter("Power",new Power( new Microphone( new Headphone() ) )));
resolve.Call();*/
// 第二种
containerBuilder.RegisterType<AndroidPhone>().Keyed<IPhone>("AndroidPhone");
containerBuilder.RegisterType<ApplePhone>().Keyed<IPhone>("ApplePhone");
IContainer container = containerBuilder.Build();
IPhone resolve = container.ResolveKeyed<IPhone>("AndroidPhone",new NamedParameter("Power",new Power( new Microphone( new Headphone() ) )));
resolve.Call();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值