.NET Core - 更改控制器中的依赖关系

2024-02-02

我正在开发一个 Web 应用程序(.net core 2.2)并尝试替换控制器中对查询字符串参数的现有依赖项。我知道,可以替换 Startup.cs 中的依赖项(ConfigureServices(IServiceCollection services)方法)。但问题是我无法访问控制器中的“IServiceCollection”。你们知道如何实现它吗?

这就是在Startup中替换依赖的方法。 “ServiceCollectionDescriptorExtensions”具有“替换”方法。

services.Replace(ServiceDescriptor.Scoped<IFooService,AnotherVersionOfFooService>());

https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.extensions.servicecollectiondescriptorextensions?view=dotnet-plat-ext-3.1#Microsoft_Extensions_DependencyInjection_Extensions_ServiceCollectionDescriptorExtensions https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.extensions.servicecollectiondescriptorextensions?view=dotnet-plat-ext-3.1#Microsoft_Extensions_DependencyInjection_Extensions_ServiceCollectionDescriptorExtensions

Thanks


像这样的东西...

公开课服务集合 {

    public IConfiguration Configuration { get; }
    public IServiceCollection Services { get; }
    public ServicesCollections()
    {
    }
    public ServicesCollections(IConfiguration configuration, IServiceCollection services)
    {
        Configuration = configuration;
        Services = services;
    }


}


/// <summary> Generic singleton with double check pattern and with instance parameter </summary>
/// <typeparam name="T"></typeparam>
public class SingleObject<T> where T : class, new()
{
    /// <summary> Lock object </summary>
    private static readonly object _lockingObject = new object();

    /// <summary> Instance </summary>
    private static T _singleObject;

    /// <summary> ctor </summary>
    public SingleObject()
    {
    }

    /// <summary> Instance with parameter </summary>
    /// <param name="param">Parameters</param>
    /// <returns>Instance</returns>
    public static T Instance(params dynamic[] param)
    {
        if (_singleObject == null)
        {
            lock (_lockingObject)
            {
                if (_singleObject == null)
                {
                    _singleObject = (T)Activator.CreateInstance(typeof(T), param);
                }
            }
        }
        return _singleObject;
    }
}

在你的启动中——

公共无效ConfigureServices(IServiceCollection服务) { services.AddControllersWithViews();

        services.Configure<CookiePolicyOptions>(options =>
        {
            //This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
        }
       );

        services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Latest);

        services.AddMvc()
            .AddControllersAsServices();

        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
        services.AddRazorPages();


       var configs = Interfaces.SingleObject<Interfaces.ServicesCollections>.Instance(Configuration, services);
        services.AddScoped<ServicesCollections>();
        services.AddTransient(ctx => new SSO.Gateway.Web.Controllers.LoginController(configs));

配置身份服务器(服务);

    }

在你的控制器中——

public class YourController : Controller
{
    public YourController (ServicesCollections obj)
    {
        Configuration = obj.Configuration;
        Services = obj.Services;
        ConfigureServices();
    }

    public IConfiguration Configuration { get; }

    public IServiceCollection Services { get; }

    public void ConfigureServices()
    { 

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Core - 更改控制器中的依赖关系 的相关文章

  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • Eclipse:如何增加查找/替换历史记录?

    查找 替换对话框显示最后 8 个条目 该对话框通过 Ctrl F 显示 我想增加 查找 和 替换为 输入字段的历史记录中显示的条目数 我必须搜索并替换几个字符串和正则表达式 因此我一次又一次地输入字符串和正则表达式 我并不是指文件内容更改的
  • 从 EntityManagerFactory 连接 EntityManager 的问题

    我知道 spring 有它自己的 JPA 对象工厂 但我想让它按原样工作 从那里我将研究最佳实践 我只是处于理解过程中 这是我尝试为其生成 bean 的实际代码 EntityManagerFactory emf Persistence cr
  • 从另一个命令 Handle() 方法中调用命令

    嗨 我正在使用简易注射器 https simpleinjector orgDI 库并一直在关注一些关于围绕命令模式设计的架构模型的非常有趣的材料 同时 在我的架构的命令方面 https cuttingedge it blogs steven
  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • sed 替换 json 对象中键的值

    我想做什么 给定一个 json 事件文件 我想通过关键字定位特定事件 然后将该事件中的键值替换为 这必须使用 sed 来完成 Splunk 转发问题 我不会用细节来烦你 事件示例 message we have a response fro
  • 注入需要构造函数参数的服务

    我有一项服务需要启动一些值 Injectable export class MyService private myVals any constructor init any this myVals init 而消费者 Component
  • Nestjs全局pubsub实例和依赖注入

    我遵循了有关 pubsub subscriptions 的 Nestjs DOCS 根据示例 pubsub 在给定解析器的顶部初始化为 const pubSub new PubSub 后来文档说 我们在这里使用了本地 PubSub 实例 相
  • 替换因子列中的

    我想更换
  • Javascript 替换为正则表达式无法正常工作

    我正在尝试使用正则表达式验证名称 正则表达式阻止用户连续输入 2 个空格或点 这是我的代码 function test input var regex A Za z 0 1 s 0 1 input value input value rep
  • Xamarin、Autofac、NavigationService 和 BeginLifetimeScope

    关于带有 autofac 的生命周期范围以及何时在 xamarin 应用程序中使用它们的初学者问题 正如这篇文章中提到的 https nblumhardt com 2011 01 an autofac lifetime primer htt
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p
  • docx 模板 Docx4j 替换 Java 中的文本

    我是 Docx4j 的新手 我的任务是替换 docx 模板的一些文本 我阅读了 docx4j 的入门指南 但我认为我没有完全理解整个概念 好吧 无论如何 我已经尝试过 Docx4j 的解压模板 1 它与给定的 docx 配合得很好 但是当我
  • 依赖注入在 C++ 中有用吗

    C uses 依赖注入 DI 很多有一个lossless and testable平台 为此 我需要一个interface也许还有一个DI or 控制反转 IoC 容器为了解决我的情况 但是在 C 中如何做到这一点呢 我读过一些相关内容 似
  • 如何删除Python中特定字符之前的所有字符?

    我想删除指定字符或字符集之前的所有字符 例如 intro lt gt I m Tom 现在我想删除 lt gt before I m 或者更具体地说 I 有什么建议么 Use re sub 只需匹配所有字符即可I然后将匹配的字符替换为I r
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • 按类型进行弹簧接线比按名称接线要慢很多

    在我的项目中 我试图迁移 Foo foo Foo beanFactory getBean name into Foo foo beanFactory getBean Foo class 好处是显而易见的 类型安全 更少复杂的代码 更少无用的
  • Java - 使用数组中的值的replace()方法正在更改数组值?

    我正在做类似的事情 public static String list a b c d It gives me a NullPointeException if I didn t use static public String encry
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • Dropwizard 和 Guice:注入环境

    我目前正在构建一个基于 Dropwizard Guice Jersey 的应用程序 其中数据库访问暂时由 JDBI 处理 我想要实现的是拥有典型的企业架构 其中资源访问服务类访问 DAO 类 而 DAO 类又访问数据库 如果能以正确的 DI

随机推荐

  • 替换所有与正则表达式匹配的匹配项

    我有一个正则表达式 用于搜索包含以下内容的字符串 00 or 11 如下 00 11 我想做的是将所有与模式匹配的出现替换为 X00X or X11X 例如 字符串 00 0 11 会导致 X00X 0 X11X 我正在研究 Python
  • 使用 ReactJS 映射数组的数组

    所以我想做的是映射数组的数组 首先 我从简单开始并开始工作 一个简单的国家 地区数组 嗯 国家 地区代码 countries map value index gt return span h2 Hello world h2 hr span
  • 在 CustomScrollView 中使用 StreamBuilder 和 SliverLists

    我正在尝试使用StreamBuilder获取数据 我想使用显示该数据SliverList全部在一个CustomScrollView这样我就可以利用附带的功能CustomScrollView 关于如何实现这一目标有什么想法吗 当然 这很简单
  • 使用单个控制器控制多个 html5 音轨

    我正在尝试为网站实现一个非常小的音频播放器 界面相当简单 它有一个播放 暂停按钮和一个静音 取消静音按钮 我遇到的问题是为不同的曲目实现同一播放器的多个实例 播放器的 javascript 是 jQuery function var myA
  • 多个 ACS 网址

    我们使用 PingFederate 进行 SSO 并且是 SP 发起的 Ping Federate 将像 Idp 一样行事 对于应用程序 有 2 个网络服务器 用于高可用性 我的问题是 1 我们可以提供两个默认的url 在控制台中只能设置一
  • 如何使用 Gson 反序列化 ConcurrentMap

    我正在尝试反序列化一个具有ConcurrentMap但我得到了一个例外 Caused by java lang IllegalArgumentException Can not set java util concurrent Concur
  • 访问 Meteor 中的 node.js 文件系统模块

    我正在创建一个网络应用程序 它将编辑存储在用户硬盘上的一些配置文件 并决定尝试一下 Meteor 我想使用 Node js 的文件系统模块来处理配置文件的 I O 但我无法弄清楚如何包含该模块 经过一番搜索 我在 StackOverlow
  • 使用 Google Drive .NET API 创建文件的空响应

    我正在尝试使用 Google Drive NET API v3 将文件上传到我的云端硬盘 我的代码如下 static string Scopes DriveService Scope Drive DriveService Scope Dri
  • CUDA:从内核调用 __device__ 函数

    我有一个内核调用deviceif 语句中的函数 代码如下 device void SetValues int ptr int id if ptr threadIdx x id question related to here ptr thr
  • 部署 lambda 函数时如何从无服务器获取 API 网关 ID 作为输出部分

    我想在无服务器的输出部分获取API网关的ID 然后将其转换为我的API URL https fgh5t4tjm2 execute api us east 1 amazonaws com dev 在另一个无服务器中使用 下面是我通过在无服务器
  • 相同的片段、edittext 和 requestfocus 问题

    很抱歉再次就此事寻求帮助 但所有其他帖子都没有帮助 场景如下 我有一个活动 A 其中包含一个布局 其中有一个片段 该片段根据用户输入进行交换 其中一个片段里面有一个编辑文本 我想专注于创建并显示该死的软键盘 因此 在我使用的片段的 onCr
  • PHP:如何将正则表达式转换为示例匹配?

    我有一个用于匹配 URI 的正则表达式 例如 preg match my uri i my uri whatever 我用它来路由 例如 http www mywebsite com my uri page html http www my
  • 在 pandas 中为 python 创建虚拟变量

    我正在尝试使用 python 中的 pandas 从分类变量创建一系列虚拟变量 我遇到过get dummies函数 但每当我尝试调用它时 我都会收到一个错误 指出名称未定义 任何创建虚拟变量的想法或其他方法将不胜感激 EDIT 由于其他人似
  • 将一系列趋势线方程获取到形状文本框

    我试图将图表中第一个系列的趋势线方程获取到工作表上其他位置的形状文本框 但是 只有当我逐行执行代码时 我才能正确填充文本框 在运行时它没有效果 For Each chtObj In ActiveSheet ChartObjects Set
  • 如何获取联系人照片 URI

    我正在与 Android Contact ContentProvider 合作 我有一个电话号码我需要得到URI of the Photo与此电话号码关联的联系人 我该怎么做 我知道我可以得到raw data照片并构建输入流 但我不需要输入
  • 在 jQuery 中向给定日期添加天数[重复]

    这个问题在这里已经有答案了 我有一个包含三个字段的表单 start date days end date 我想通过在开始日期上添加天数来获取结束日期 我的 jQuery 代码是 days change function var start
  • 硬件断点始终为 EXCEPTION_SINGLE_STEP

    我有一个充当调试器的程序 我为线程设置了一个 hw bp 将 dr0 设置为我想要 bp 所在的地址 并将 dr7 设置为 1 因为我希望 bp 在每次执行该地址时生成一个事件 它有效 但现在的问题是我一直没有停止接收 EXCEPTION
  • 当我尝试在 Excel 工作表上运行查询时出现“名称无效括号”错误

    为了制作一些报告 我需要解析一些 Excel 文件 当我尝试从工作表中选择记录时 出现下一个错误 名称 1 的括号无效 页 这是我的代码 OleDbDataAdapter myCommand new OleDbDataAdapter SEL
  • 如何使用泛型来替代一堆处理不同类型的重载方法?

    我有一堆重载方法 它们都获取某种类型的数组作为参数 并从该数组返回一个随机值 function GetRandomValueFromArray Arr array of String String overload begin Result
  • .NET Core - 更改控制器中的依赖关系

    我正在开发一个 Web 应用程序 net core 2 2 并尝试替换控制器中对查询字符串参数的现有依赖项 我知道 可以替换 Startup cs 中的依赖项 ConfigureServices IServiceCollection ser