标签:ted section conf bsp 服务 单元 线程 默认 tar
这里只谈益处。
部分来自官方文档的一些建议
public class Service1 : IDisposable {} public class Service2 : IDisposable {} //方式一 public void ConfigureServices(IServiceCollection services) { services.AddSingleton<Service1>(); services.AddSingleton<IService2>(sp => new Service2()); } //方式二 public void ConfigureServices(IServiceCollection services) { services.AddSingleton<Service1>(new Service1()); services.AddSingleton(new Service2()); }
.NET CORE 3.x版本后,引入第三方IOC框架的方式变更了,这里不再贴出2.x的方式。以Autofac框架为例。
Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .ConfigureLogging((hostingContext, logging) => { logging.ClearProviders(); logging.AddConsole(); logging.AddNLog(); }); });
Startup.cs
//原来的 ConfigureServices保留,也可以使用原来的框架继续注入
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddMemoryCache(); services.Configure<List<string>>(Configuration.GetSection("BlackPhoneList")); services.Configure<Dictionary<string, string>>(Configuration.GetSection("BusinessMessages")); } //增加ConfigureContainer(ContainerBuilder builder) 方式,使用Autofac框架注入 public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterType<PhoneBlackListValidator>().Named<IPhoneValidator>("PHONE_BLACKLIST").SingleInstance(); builder.RegisterType<PhonePerDayCountValidator>().Named<IPhoneValidator>("PHONE_PERDAYCOUNT").SingleInstance(); builder.RegisterType<UniqueIdPerDayCountValidator>().Named<IUniqueIdValidator>("UNIQUEID_PERDAYCOUNT").SingleInstance(); //可遍历类型注入,注意 只支持IEnumerable\IList\ICollection 类型 builder.RegisterType<MessageSendValidator>().As<IMessageSendValidator>().SingleInstance(); }
3.x 主要是在IServiceCollection和IServiceProvider之间增加了一个 ContainerBuilder 容器适配,使得第三方IOC框架引入更加合理了。具体实现原理可以网上源码查找。
标签:ted section conf bsp 服务 单元 线程 默认 tar
原文地址:https://www.cnblogs.com/gt1987/p/12973001.html