1.Nuget引入以下包:
Autofac
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy
2.需要依賴注入的程式集随便建個類,裡面建個方法GetAssemblyName()擷取程式集名稱;
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);
}