zoukankan      html  css  js  c++  java
  • Autofac 动态获取对象静态类获取对象

    Autofac 从容器中获取对象

    静态类或Service场景可以动态,可以直接动态获取对象

    /// <summary>
    /// 从容器中获取对象
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static T GetFromFac<T>()
    {
    	return _container.Resolve<T>();
    }
    

    使用方法:

    Startup->ConfigureServices-> 加入代码 AutofacCore.InitContainer(container);

    2020-06-10_174250.png

    AutofacCore类:

    using Autofac;
    using Autofac.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    
    namespace CodeHelper
    {
        public static class AutofacCore
        {
            private static IContainer _container;
    
            public static void InitContainer(IContainer container)
            {
                _container = container;
            }
    
            public static IContainer InitAutofac(IServiceCollection services)
            {
                var builder = new ContainerBuilder();
    
                //注册数据库基础操作和工作单元
                //services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
                //services.AddScoped(typeof(IUnitWork), typeof(UnitWork));
    
                //注册app层(废弃->不使用此方法,修改采用配置文件)
                //builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
    
                ////防止单元测试时已经注入
                //if (services.All(u => u.ServiceType != typeof(ICacheContext)))
                //{
                //    services.AddScoped(typeof(ICacheContext), typeof(CacheContext));
                //}
                //if (services.All(u => u.ServiceType != typeof(IHttpContextAccessor)))
                //{
                //    services.AddScoped(typeof(IHttpContextAccessor), typeof(HttpContextAccessor));
                //}
    
                //将配置添加到ConfigurationBuilder
                //var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory());
                //config.AddJsonFile("autofac.json");
                //config.AddJsonFile来自Microsoft.Extensions.Configuration.Json
                //config.AddXmlFile来自Microsoft.Extensions.Configuration.Xml
    
                //用Autofac注册ConfigurationModule
                //var module = new ConfigurationModule(config.Build());
    
                //builder.RegisterModule(module);
                //builder.Populate(services);
                //_container = builder.Build();
                return _container;
    
            }
    
            /// <summary>
            /// 从容器中获取对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            public static T GetFromFac<T>()
            {
                return _container.Resolve<T>();
            }
        }
    }
    
    

    代码调用:

    var Configuration = AutofacCore.GetFromFac<IConfiguration>();
    AppId = Configuration["AppSettings:AppId"];
    AppSecret = Configuration["AppSettings:AppSecret"];
    
  • 相关阅读:
    【转】嵌入式程序员应该知道的16个问题
    GetMemory()函数
    Some good questions
    [转]永远做一个有计划的人
    内存分配管理
    c语言面试题(感觉比较好的题目)
    const char*, char const*, char*const的区别
    《论语》《中庸》《大学》经典语录
    洗脑
    python基础之函数参数,名称空间,以及函数嵌套
  • 原文地址:https://www.cnblogs.com/codedisco/p/13087030.html
Copyright © 2011-2022 走看看