zoukankan      html  css  js  c++  java
  • 在控制台进行依赖注入(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>  
    

      运行结果:

  • 相关阅读:
    html 一号店静态页面
    多线程
    TCP通信
    MySQL连接查询
    Mysql数据库 DDL 数据定义语言
    MySQL数据库 DML 数据操作语言
    java字符流
    java File类
    java变量
    JDK、JRE、JVM的关系
  • 原文地址:https://www.cnblogs.com/qulianqing/p/7347427.html
Copyright © 2011-2022 走看看