asp.net-web-api - 无法使用我们自己的类解析类型的服务
问题描述
我们在调用 web api 控制器时遇到了这个异常:
InvalidOperationException:尝试激活“SDS.Lambda.Controllers.SapController”时无法解析“SDS.Lambda.Interfaces.ISecretManager”类型的服务。\r\n <p class="location">Microsoft.Extensions.DependencyInjection.ActivatorUtilities .GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)
StartUp.cs
包含以下内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISecretManager, SecretManager>();
}
控制器有这个构造函数:
public class SapController : Controller
{
public SapController(ISecretManager secretManager)
{
_secretManager = secretManager;
}
}
我们在将其他类型注入构造函数时遇到同样的问题,但可以注入 IConfiguration 实例,例如该参数不会导致异常:
public SapController(IConfiguration configuration, ISecretManager secretManager)
ISecretManager 界面看起来像这样(是的,确实如此):
namespace SDS.Lambda.Interfaces
{
public interface ISecretManager
{
}
}
和课程(是的,真的 - 我减少了它以避免复杂性):
namespace SDS.Lambda.Interfaces
{
public class SecretManager : ISecretManager
{
}
}
我们是否提供了错误的接口/具体类型?
有没有办法检索具体类型以测试它是否已正确提供?
当执行到底部时ConfigureServices
,如果我们查看services
实例结果枚举,在调试器视图中,我们正在注入的类型被列出,因此我们无法看到它们为什么无法实例化。
更新
在同一解决方案中详细说明和解释另一个类/依赖项的问题:
控制器:
namespace SDS.Lambda.Controllers
{
[Route("api/[controller]")]
public class SapController : Controller
{
readonly IHelper helper;
public SapController(IHelper helpme)
{
helper = helpme;
}
...
}
界面:
namespace SDS.Lambda.Interfaces
{
public interface IHelper
{
}
}
班级:
namespace SDS.Lambda.Helpers
{
public class Helper : IHelper
{
public Helper()
{
}
}
}
启动:
namespace SDS.Lambda
{
public class Startup
{
public static IConfiguration Configuration { get; private set; }
private readonly AppSettings _appSettings;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
_appSettings = configuration.GetSection("AppSettings").Get<AppSettings>();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(logger => logger.AddLambdaLogger());
services.AddSingleton<IHelper, Helper>();
services.AddControllers();
}
...
}
解决方案
推荐阅读
- css - 如何使用 HTML 类通过 CSS 设置 Shopify 部分大小?
- javascript - 如何使图像在右下角响应?
- python - 如何通过 xlsx-writer 模块将 python 生成的宏脚本添加到 excel 文件中?
- python - 在 Python 3 中使用 f2py 时出现错误“架构 i386 的未定义符号”
- facebook - Facebook 应用审核要求
- wpf - WPF 单选按钮背景颜色
- firebase - 使用 Firebase 时如何管理在现有对象上添加新属性?
- php - Facebook 返回要下载的图片 URL
- mongodb - Mongo在数组字段上错误排序?
- python-3.x - 具有用于节点和树的单独类的二叉树实现