.Net Core 控制台应用程序 依赖注入


一、使用自带的IOC容器

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

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

修改Program.cs

IServiceCollection services = new ServiceCollection();
//注入
services.AddTransient();
services.AddTransient();
//构建容器
IServiceProvider serviceProvider = services.BuildServiceProvider();

//调用业务
var myTest = serviceProvider.GetService();
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

/// 
    /// Autofac IOC 容器
    /// 
    public class AutofacContainer
    {
        private static readonly ContainerBuilder _builder = new ContainerBuilder();
        private static IContainer _container;

        /// 
        /// 构建IOC容器
        /// 
        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);
        }

        /// 
        ///
        /// 
        /// 
        /// 
        public static T Resolve()
        {
            return _container.Resolve();
        }

        public static T Resolve(params Parameter[] parameters)
        {
            return _container.Resolve(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();

相关