天天看點

.NET6使用autofac依賴自動注入

1.Nuget引入以下包:

Autofac
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy      

2.需要依賴注入的程式集随便建個類,裡面建個方法GetAssemblyName()擷取程式集名稱;

.NET6使用autofac依賴自動注入
using System.Reflection;

namespace Service
{
    public static class ServiceAutofac
    {
        /// <summary>
        /// 擷取程式集名稱
        /// </summary>
        /// <returns></returns>
        public static string GetAssemblyName()
        {
            return Assembly.GetExecutingAssembly().GetName().Name;
        }
    }
}      

3.Program.cs中注入autofac,需要注入的類和程式集如下:

// 以下是autofac依賴注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
     //先注入JWT
     builder.RegisterType<AuthorizeJWT>().As<IAuthorizeJWT>();//可以是其他接口和類
     // 注入Service程式集
     Assembly assembly = Assembly.Load(ServiceAutofac.GetAssemblyName());//可以是其他程式集
    builder.RegisterAssemblyTypes(assembly)
    .AsImplementedInterfaces()
    .InstancePerDependency();
});      

4.使用-構造函數:

private readonly IConfiguration _configuration;//配置
        private Authorize.IAuthorizeJWT _authorizeJWT;//認證
        private readonly ILogger<LoginController> _logger;//日志
       //依賴注入
        public LoginController(IConfiguration configuration, ILogger<LoginController> logger, Authorize.IAuthorizeJWT authorizeJWT)
        {
            _configuration = configuration;
            _logger = logger;
           _authorizeJWT=authorizeJWT;
        }      

5.使用:

/// <summary>
        /// 使用者登入
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        [HttpPost]
        public string Login([FromBody]ViewModels.UserLogin user)
        {
            _logger.LogError($"{System.Reflection.MethodBase.GetCurrentMethod().Name} Args:{user.ToString()}");
            return _authorizeJWT.GetJWTBear(user);
        }