ASP .NET Core 實例獲取的方法
以下說明都以ILogger<HomeController> logger實例獲取為例
1 構造函數獲取
1 private readonly ILogger<HomeController> _logger; 2 public HomeController(ILogger<HomeController> logger) 3 { 4 _logger = logger; 5 }
2 方法參數獲取
測試發現[FromServices]只能在控制器(Controller)里面使用
1 public IActionResult Index([FromServices] ILogger<HomeController> logger) 2 { 3 return View(); 4 }
3 屬性注入
屬性必須是公開的public,不過在最新的.NET中已經不支持此方法 參考此鏈接:https://github.com/aspnet/Mvc/commit/2a89caed05a1bc9f06d32e15d984cd21598ab6fb
1 [FromServices] 2 public ILogger<HomeController> logger{get;set;}
如果想繼續使用可以自定義特性讓他支持Property,
1 [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 2 public class FromServicesForPropertyAttribute : Attribute, IBindingSourceMetadata 3 { 4 public BindingSource BindingSource => BindingSource.Services; 5 }
4 IServiceProvider獲取指定實例
自定義一個靜態類,在程序初始化的時候保存IServiceProvider 實例
public static class Global { private static IServiceProvider _provider; public static void SetServiceProvider(IServiceProvider provider) { _provider = provider; } public static T? GetService<T>() { return _provider.GetService<T>(); } }
浙公網安備 33010602011771號