579*_*913 11 c# console-application .net-core dependency-inversion
我正在使用.NET Core依赖注入,但是当我试图在另一个类中获取服务时,我得到'IServiceProvider.GetService(Type)'不能与类型参数一起使用'错误.
这个错误意味着什么?我知道泛型类型的参数是这样的:GenericInterface <>,而GetService方法不会将GenericInterface <>作为参数.
为什么我会收到此错误,如何解决?
界面
public interface IService
{
void Process();
}
Run Code Online (Sandbox Code Playgroud)
实现接口的类
public class Service : BaseService<IConfig, SomType>
{
public Service(
ILogger logger : base(logger)
{
}
...
}
Run Code Online (Sandbox Code Playgroud)
BaseService类是一个抽象类,它实现了IService接口.
public abstract class BaseService<TConfig, TE> : AnotherBaseService, IService where TConfig : IConfig where TE : struct, IConvertible
{
protected BaseService(ILogger logger): base(logger)
{
}
...
}
Run Code Online (Sandbox Code Playgroud)
AnotherBaseService
public abstract class BaseService
{
protected readonly ILogger Logger;
protected BaseService(ILogger logger)
{
Logger = logger;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我是如何注册的.
serviceCollection.AddScoped<IService, Service>();
Run Code Online (Sandbox Code Playgroud)
我如何获得我需要的服务.
var incoming = serviceProvider.GetService<IService>();
Run Code Online (Sandbox Code Playgroud)
注意:我刚开始使用依赖注入,.NET Core并且还不了解DI的所有内容.你的答案会有很大的帮助.
Pan*_*vos 39
通用GetService <T>方法是一种扩展方法.这意味着你需要有一个:
using Microsoft.Extensions.DependencyInjection;
Run Code Online (Sandbox Code Playgroud)
允许编译器找到它.
此方法仅适用于可选服务.null如果无法构造对象,它将返回,因为未注册该类型或者因为缺少某些依赖项.
除非服务可用,否则应该在应用程序无法工作时使用GetRequiredService.如果无法创建实例,则会抛出InvalidOperationException.
当异常被抛出,全异常文本将是一个巨大的找到实际问题的帮助.构造函数中抛出的异常可以出现在Exception.InnerException属性中.最终在抛出异常中的调用序列将出现在StackTrace属性中.调用Exception.ToString()将返回一个字符串,其中包含当前异常和任何内部异常的所有信息.
这意味着您的编译器只知道采用类型的方法。
你可以打电话
var incoming = serviceProvider.GetService(typeof(IService));
Run Code Online (Sandbox Code Playgroud)
或者你可以添加一个
using Microsoft.Extensions.DependencyInjection;
Run Code Online (Sandbox Code Playgroud)
确保您的编译器知道允许您将类型指定为泛型参数的扩展方法。这可能需要Microsoft.Extensions.DependencyInjection.Abstractions安装软件包。
| 归档时间: |
|
| 查看次数: |
4423 次 |
| 最近记录: |