C#的IOC容器
众所周知C#的控制台程序不能像Java的Spring Boot Batch那么丝滑。原因就在于IOC容器。如果
直接创建IOC容器,不论是.NET提供的ServiceCollection 或者 Autofac提供的ContainerBuilder
都只能存在于Program.cs这个启动类,之前百度过很长时间, 大部分的解决方案都是用设置一个静态对象
保存IOC容器,这个能实现,但是很Low!
其实.NET本身是提供了解决方案,通用主机。
使用ServiceCollection的IOC容器
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IBookService, MusicBook>();//注册
using IHost host = builder.Build();
host.Start();
注意Nuget 引入Microsoft.Extensions.DependencyInjection;
使用ContainerBuilder的IOC容器
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureContainer<ContainerBuilder>(container =>
{
container.RegisterType<FilesRead>(); //注册
container.RegisterType<ShellFactory>().PropertiesAutowired();
}).UseServiceProviderFactory(new AutofacServiceProviderFactory());
using IHost host = builder.Build();
host.Services.GetAutofacRoot().Resolve<FilesRead>().Read();
host.Start();
注意Nuget 引入Autofac ,Autofac.Extensions.DependencyInjection;