c# 高级编程 第20章 (第457页)

129 阅读1分钟

其他依赖注入容器

  • Microsoft.Extensions.DependencyInjection是一个简单的DI容器, ASP.NET Core就使用它
  • 许多第三方的容器,提供额外功能
  • Microsoft.Extensions.DependencyInjection,还可以使用适配器来配置它。比如Autofac这个第三方DI容器,以NuGet包Autofac.Extensions.DependencyInjection的形式添加一个适配器
  • 还有很多第三方DI容器:Rezolver, Scan, Neleus, CuteAnt, fm, Dryloc, Stashbox
    class Program
    {
        static void Main()
        {
            using (IContainer container = RegisterServices())
            {
                var controller = container.Resolve<HomeController>();
                string result = controller.Hello("Katharina");
               
                Console.WriteLine(result);
            }
        }

        static IContainer RegisterServices()
        {
            var services = new ServiceCollection();
            services.AddSingleton<IGreetingService, GreetingService>();
            services.AddTransient<HomeController>();

            var builder = new ContainerBuilder();
            builder.Populate(services);
            return builder.Build();
        }
    }
    public class HomeController
    {
        private readonly IGreetingService _greetingService;
        public HomeController(IGreetingService greetingService)
        {
            _greetingService = greetingService ?? throw new ArgumentNullException(nameof(greetingService));
        }
        public string Hello(string name) =>
            _greetingService.Greet(name);
    }
    
    public class GreetingService : IGreetingService
    {
        public string Greet(string name) => $"Hello, {name}";
    }
    
    public interface IGreetingService
    {
        string Greet(string name);
    }