zoukankan      html  css  js  c++  java
  • .Net Core 控制台应用程序 依赖注入

    一、使用自带的IOC容器

    参考自 https://www.cnblogs.com/dudu/p/5552293.html

    1、添加程序包 Microsoft.Extensions.DependencyInjection

    修改Program.cs

    IServiceCollection services = new ServiceCollection();
    //注入
    services.AddTransient<IMemcachedClient, MemcachedClient>();
    services.AddTransient<MyTest>();
    //构建容器
    IServiceProvider serviceProvider = services.BuildServiceProvider();
    
    //调用业务
    var myTest = serviceProvider.GetService<MyTest>();
    myTest?.test();

    MyTest.cs代码

    internal class MyTest
        {
            private IMemcachedClient _memcachedClient;
         //构造函数注入
    public MyTest(IMemcachedClient memcachedClient) { _memcachedClient = memcachedClient; } public void test() { DateTime datetime = _memcachedClient.getTime(); Console.WriteLine(datetime); } }

     二、使用Autofac

    1、添加程序包 Autofac 和 Autofac.Extensions.DependencyInjection

    Program.cs

    IServiceCollection services = new ServiceCollection();
                //用Autofac接管
                AutofacContainer.Build(services);

    AutofacContainer.cs

    /// <summary>
        /// Autofac IOC 容器
        /// </summary>
        public class AutofacContainer
        {
            private static readonly ContainerBuilder _builder = new ContainerBuilder();
            private static IContainer _container;
    
            /// <summary>
            /// 构建IOC容器
            /// </summary>
            public static IServiceProvider Build(IServiceCollection services)
            {
                Assembly iserAss = Assembly.Load("CBest.AFS.Interface");
                Assembly serAss = Assembly.Load("CBest.AFS.Service");
                //创建serAss中的所有类的instance以此类的实现接口存储
                _builder.RegisterAssemblyTypes(iserAss, serAss).AsImplementedInterfaces();
    
                _builder.Populate(services);
                _container = _builder.Build();
                return new AutofacServiceProvider(_container);
            }
    
            /// <summary>
            ///
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static T Resolve<T>()
            {
                return _container.Resolve<T>();
            }
    
            public static T Resolve<T>(params Parameter[] parameters)
            {
                return _container.Resolve<T>(parameters);
            }
    
            public static object Resolve(Type targetType)
            {
                return _container.Resolve(targetType);
            }
    
            public static object Resolve(Type targetType, params Parameter[] parameters)
            {
                return _container.Resolve(targetType, parameters);
            }
        }

    具体业务中的使用

    private readonly IOrderInfoService _orderInfoService = AutofacContainer.Resolve<IOrderInfoService>();
  • 相关阅读:
    推荐7个GitHub上不错的Python机器学习项目
    值得收藏的45个Python优质资源
    9 个鲜为人知的 Python 数据科学库
    小众Python库介绍
    Sebastian Ruder : NLP 领域知名博主博士论文面向自然语言处理的神经网络迁移学习
    学习Python 新去处:Python 官方中文文档
    图像超分辨率项目帮你「拍」出高清照片
    入坑机器学习?听听MIT在读博士的AI心得
    自然语言处理领域重要论文&资源全索引
    旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/15657630.html
Copyright © 2011-2022 走看看