c# - 解决 .Net core 2.0 中抽象类的依赖注入(inject)

标签 c# asp.net-mvc .net-core asp.net-core-2.0

我正在使用.net Core 2.0。

我有一个 MemberInfo 类,它将继承 Member Abstract 类。需要解决 StartUp.cs 文件中的依赖关系。

public class MemberInfo : Member
{
    public MemberInfo()
    {

    }
}
public abstract class Member: IMemberDetails
{
    public DateTime currentDate = DateTime.Now;;
} 

在 startup.cs 文件中
public void ConfigureServices(IServiceCollection services)
  {   
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddScoped<IMemberDetails, Member>();
services.AddScoped<Member, MemberInfo >();
}

我收到异常消息
InvalidOperationException: Unable to resolve service for type 'MemberIfo' while attempting to activate 'ProcessData' .

最佳答案

您的 ProcessData-Class 找不到 MemberInfo,因为您添加了 MemberInfo 作为 Member-class 的表示。如果你想直接访问类型 MemberInfo 你需要做 services.AddScoped<MemberInfo, MemberInfo >();或更短 services.AddScoped<MemberInfo>(); .

如果您只需要抽象定义,您应该请求抽象类 Member ,而不是具体实现MemberInfo在您的 ProcessData 类中。为了更清楚地区分定义和实现,您可能需要添加一个接口(interface),正如 this answer 中指出的那样。 .

如果你想让两种类型都指向同一个实现,但又不想在同一个范围内有多个实例,你可以这样做:

services.AddScoped<MemberInfo>();
services.AddScoped<Member>((serviceProvider) => serviceProvider.GetRequiredService<MemberInfo>());

关于c# - 解决 .Net core 2.0 中抽象类的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57199118/

相关文章:

c# - .Net core IHostedService后台任务异常不会终止应用

javascript - AJAX 发布数据在 Controller mvc 中为空

c# - Entity Framework 核心 : how to map multiple objects of the same type

c# - 如何使用 Active Directory 存储在 AcquireTokenAsync 中收到的 token

c# - AdomdConnection 可以接受 token 吗

c# - 如何使用aspx实现listview

c# - Twitter 的 OAuthWebSecurity "Remember me"

c# - 带下划线的 MVC 3 模型绑定(bind)

c# - 如何在 Server.MapPath 的 ASP.Net Core 替代方法中获取绝对路径

c# - 除非我断言方法的返回值,否则测试不会执行方法