码迷,mamicode.com
首页 > Web开发 > 详细

.NetCore IOC容器练习

时间:2020-05-14 14:57:47      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:style   new   imp   ddt   sof   builds   声明   ioc   msde   

Microsoft.Extensions.DependencyInjection

//添加Nuget包Microsoft.Extensions.DependencyInjection
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IBase, TheyClass>();
serviceCollection.AddSingleton<IBase, MyClass>();
serviceCollection.AddScoped<IBase, YouClass>();

var serviceProvider = serviceCollection.BuildServiceProvider();
serviceProvider.GetService<IBase>().SayHello();
foreach (var item in serviceProvider.GetServices<IBase>())
{
    item.SayHello();
}
serviceProvider.GetService<IBase>().SayHello();
foreach (var item in serviceProvider.GetServices<IBase>())
{
    item.SayHello();
}
//仅注册过的方可拿到,此处MyClass未注册,GetService为Null,抛异常
serviceProvider.GetService<MyClass>().SayHello();
//仅注册过的方可拿到,此处MyClass未注册,GetRequiredService提示未注册,抛异常
serviceProvider.GetRequiredService<MyClass>().SayHello();

 

Castle.Windsor:

//需要添加Nuget包:Castle.Windsor.MsDependencyInjection和Castle.Core
//需要添加引用:Castle.Windsor和Castle.Windsor.MsDependencyInjection
//创建容器
Castle.Windsor.WindsorContainer container = new Castle.Windsor.WindsorContainer();
//旧版可以适用如下注册container.AddComponent<IBase, MyClass>();
//容器注册组件,并且管理组件的生命周期
container.Register(Component.For<IBase>().ImplementedBy<MyClass>().LifestyleSingleton().Named("MyClass"));
container.Register(Component.For<IBase>().ImplementedBy<YouClass>().LifestyleScoped().Named("YouClass"));
container.Register(Component.For<IBase>().ImplementedBy<TheyClass>().LifestyleTransient().Named("TheyClass"));
container.BeginScope();
//组件激活,拿到组件实例
container.Resolve<IBase>("MyClass").SayHello();
//声明周期为Scoped的,必须执行BeginScoped后开始调用,在下一个BeginScope调用之前,只实例化一次
container.BeginScope();
foreach (var item in container.ResolveAll<IBase>())
{
    item.SayHello();
}
container.Resolve<IBase>("YouClass").SayHello();
//声明周期为Scoped的,必须执行BeginScoped后开始调用,在下一个BeginScope调用之前,只实例化一次
container.BeginScope();
foreach (var item in container.ResolveAll<IBase>())
{
    item.SayHello();
}
//容器释放
container.Dispose();

 

.NetCore IOC容器练习

标签:style   new   imp   ddt   sof   builds   声明   ioc   msde   

原文地址:https://www.cnblogs.com/lcawen/p/12888580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!