【问题标题】:ServiceProvider must have at least one public constructor to be plugged in by StructureMapServiceProvider 必须至少有一个公共构造函数才能被 StructureMap 插入
【发布时间】:2020-08-28 01:51:44
【问题描述】:

我正在尝试使用内部插件(特定于组织)来执行某些任务,以便通过插件调用方法,我需要传递依赖项。 我已经完成了初始部分,但是当我尝试使用 PreAppStart 注册时:

config.For<IServiceProvider>().Use<ServiceProvider>()

我得到以下错误:

    System.ArgumentOutOfRangeException
  HResult=0x80131502
  Message=Specified argument was out of the range of valid values.
Parameter name: Microsoft.Extensions.DependencyInjection.ServiceProvider must have at least one public constructor to be plugged in by StructureMap

我的分析: 我必须知道 ServiceProvider 类用于点网核心,但我的解决方案是标准点网(4.7),我需要实现这个插件才能完成工作。

我也试过这个:

   config.For<IServiceProvider>().Use<ServiceProvider>().Ctor<string>("randomParam").Is("ranVal");

但错误仍然相同。请帮忙!

【问题讨论】:

  • 您对config.For&lt;IServiceProvider&gt;().Use&lt;ServiceProvider&gt;() 所做的究竟有什么期望?如果您有一个依赖于IServiceProvider 的类,它如何使用该依赖关系以及它有什么期望(即它应该如何配置)?
  • 感谢您的回复,它实际上在我的解决方案的 PreAppStart(用于注册所有依赖项)类中注册了依赖项。是的,我有一个 nuget 包参考(仅适用于组织,不适用于公共),它有一个依赖于 IServiceProvider 的类。如果我的评论不清楚,请告诉我。

标签: c# .net dependency-injection structuremap service-provider


【解决方案1】:

你是在告诉结构图,当某些东西需要 IServiceProvider 时,它应该创建一个 ServiceProvider 对象。它告诉你它不能,因为ServiceProvider 没有公共构造函数。

您可能想要注册一个实际使用的对象。像这样

 config.For<IServiceProvider>().UseInstance(myServiceProviderReference);

create a service provider 有一些方法,但这是 .Net 平台扩展的一部分。我不确定这是否适用于 .net 框架项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2019-05-21
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多