03_NET6中使用Autofac

安裝包:

Autofac

Autofac.Extensions.DependencyInjection

Autofac.Extras.DynamicProxy

中文文檔:歡迎來到 Autofac 中文文檔! — Autofac 4.0 documentation (autofac-.readthedocs.io)

 

1.新建一個web api項目

新建一個AutofacMamager類,用於註冊

 public class AutofacMamager
    {
        public class AutoFacManager : Module
        {
            // 重寫 Autofac 管道 Load方法, 在這裏注入
            protected override void Load(ContainerBuilder builder)
            {
                /*
                1.瞬態
                 InstancePerDependency();

                2.單例
                SingleInstance();

                3.每個生命週期範圍一個實例
                InstancePerLifetimeScope();
                 */

                /*載程序集註冊*/
                // 加載程序集 
                Assembly ifirstGrade = Assembly.Load("IModels");
                // 添加程序集依賴
                builder.RegisterAssemblyTypes(ifirstGrade)
                    .Where(t => t.Name.EndsWith("Services"))//對象名後面有Services
                    .AsImplementedInterfaces();//.InstancePerDependency();

                
                Assembly firstGrade = Assembly.Load("Models");
                builder.RegisterAssemblyTypes(firstGrade)
                    .Where(t => t.Name.EndsWith("Services"))//對象名後面有Services
                    .AsImplementedInterfaces();//.InstancePerDependency();


                /*註冊具體類*/
                //builder.RegisterType<Student>();
                //builder.RegisterType(typeof(Student));

                /*註冊實例*/
                builder.RegisterType<Student>().As<IStudent>();

                base.Load(builder);
            }
        }
    }

 

2.創建一個AutofacExtend類,用於替換

 public static class AutofacExtend
    {
        public static void ReplaceAutofac(this WebApplicationBuilder builder)
        {
            // 替換Autofac
            builder.Host
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureContainer<ContainerBuilder>(build =>
                            {
                                build.RegisterModule(new AutoFacManager());
                            });
        }
    }

 

3.修改Program.cs

            //Autofac
            builder.ReplaceAutofac();
            var app = builder.Build();

 

 

4.創建一個控制器用戶測試

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UserController : ControllerBase
    {
        private IStudent _student;
        private ISchoolboyServices _schoolboy;

        public UserController(IStudent student, ISchoolboyServices schoolboy)
        {
            _student=student;
            _schoolboy=schoolboy;
        }

        /// <summary>
        /// 獲取學生名稱
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public string GetStudentName()
        {
            return _student.GetName();
        }

        /// <summary>
        /// 一年級學生名稱
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public string GetSchoolboyName()
        {
            return _schoolboy.Show();
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章