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>  
    

      运行结果:

  • 相关阅读:
    如何写出优秀的代码[转载]
    [转载]Java中常用日期功能综合
    JS WebBrowser 实现打印预览
    想成为优秀的技术人员你必须做到的几件事情【转载】
    JS打印
    js阿拉伯数字转中文大写
    从 SQL Server 2005 中处理 XML
    Visual Studio 2005 Express October 2004 CTP完整版本的下载
    Debug和Release的区别
    ASP.NET 中的正则表达式
  • 原文地址:https://www.cnblogs.com/qulianqing/p/7347427.html
Copyright © 2011-2022 走看看