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>(); } }