• 在控制台进行依赖注入(DI in Console)


    首先我们准备两个服务接口

        public interface IServiceA
        {
            void showConsole();
            int GetValue(int val);
        }
    

      

        public  interface IServiceB
        {
            void DoWork();
            string ShowName();
        }
    

      接着我们分别实现两个接口

        public class ServiceA : IServiceA
        {
            private IServiceB _serviceB { get; }
            public ServiceA(IServiceB serviceB)
            {
                _serviceB = serviceB;
            }
    
            public int GetValue(int val)
            {
                return val;
            }
    
            public void showConsole()
            {
                _serviceB.ShowName();
            }
        }
    

      

        class ServiceB : IServiceB
        {
            private Microsoft.Extensions.Logging.ILogger _log { get; }
    
            public ServiceB(ILogger<ServiceB> logger)
            {
                _log = logger;
            }
            public void DoWork()
            {
                _log.LogInformation($" I am doing work ");
            }
            public string ShowName()
            {
                _log.LogInformation($" At Time :{DateTime.Now.ToString()} 被调用");
                return "I am ServiceB ";
            }
        }
    

      在主函数中这么写

     static void Main(string[] args)
            {
                var serviceProvider = new ServiceCollection()
                .AddLogging()
                .AddTransient<IServiceB, ServiceB>()
                .AddTransient<IServiceA, ServiceA>()
                .BuildServiceProvider();
    
                serviceProvider.GetService<ILoggerFactory>().AddConsole(LogLevel.Debug);
                var Logger = serviceProvider
                                            .GetService<ILoggerFactory>()
                                            .CreateLogger<Program>();
                Logger.LogDebug("Starting Program");
                var serviceB = serviceProvider.GetService<IServiceB>();
                serviceB.DoWork();
                var serviceA = serviceProvider.GetService<IServiceA>();
                var k = serviceA.GetValue(12345);
                Console.WriteLine(k);
                serviceA.showConsole();
                Logger.LogInformation("All Done ");
                Console.ReadLine();
    }
    

      提示需要引入的Nuget包

    <ItemGroup>
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" />
        <PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.2" />
        <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.2" />
        <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.2" />
      </ItemGroup>  
    

      运行结果:

  • 相关阅读:
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
    table设置表格有滚动条
    Bootstrap data-toggle 元素 终止了链接默认行为,加入pill ,开启链接
    table的border-radius
    HTML之电话: 邮箱: 网址
    MySQL精华笔记
    hadoop集群配置全过程
    H5 input默认数字键盘,显示为密码格式
    ios中文模糊搜索兼容问题
    Yii2学习笔记---内附GridView配置总结
  • 原文地址:https://www.cnblogs.com/qulianqing/p/7347427.html
Copyright © 2020-2023  润新知