zoukankan      html  css  js  c++  java
  • .Net Core在程序的任意位置使用和注入服务的方法

    这篇文章主要介绍了.Net Core在程序的任意位置使用和注入服务的方法,很多朋友对此问题都不是很清楚,于是写这篇文章帮助大家学习,需要的朋友可以参考下

     

    最近有人问我:我该如何在Startup类之外的地方注入我的服务呢,都写在startup里看着好乱;我该如何在程序的其他地方获取我注入的服务呢;下面给大家写篇文章帮助大家学习。

    一、如何在Stratup类外注入服务

    首先,我们看startup类的ConfigureServices方法,我们会发现我们所有的服务都是使用IServiceCollection注入进去的

    所以我们在其他地方进行注入依然是使用这个接口进行注入,话不多说,上源码

    我们首先定义一个静态类,然后在静态类内写一个IServiceCollection的扩展方法,这样我们就可以在这进行和startup里一样注入了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static class ServiceConfiguration
     {
       public static IServiceCollection ConfigServies(this IServiceCollection service)
       {
         service.AddTransient<INavigation, NavigationLogic>();
         service.AddTransient<IUserInfo, UserInfoLogic>();
          return service;
       }
     }

    静态类写完后,我们只需要在staatup中注入我们扩展的这个静态类就可以使用这个类中所注入的服务了。

    这样我们就在可以拿到ServiceConfiguration类中所注入的所有服务了。

    二、如何在程序的任何地方拿到我所注入的服务。

    .NET Core默认的注入是使用构造函数的,如果我们想在任意 的地方拿到服务,我们需要使用IServiceProvider接口

    我们定义一个静态类,然后定义一个IServiceProvider静态属性

    1
    2
    3
    4
    public static class CZHttpContext
      {
        public static IServiceProvider ServiceProvider{get;set;};
    }

    然后我们在starup中把他注入进去

    使用方法,

    1
    var dbContext = CZHttpContext.ServiceProvider.GetService(typeof(CZDbContext)) as CZDbContext;

    这样我们就能获取出上图在startup中注入的CZDbContext;

  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/yibinboy/p/14322487.html
Copyright © 2011-2022 走看看