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

 

posted @ 2024-06-19 17:24  DreamerSix  阅读(1)  评论(0编辑  收藏  举报