首页 > 解决方案 > 解决 .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'.

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

解决方案


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

如果您只需要抽象定义,则应请求抽象类Member,而不是 ProcessData 类中的具体实现MemberInfo为了使定义和实现之间的区别更加清晰,您可能需要添加一个接口,如本答案中所指出的那样。

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

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

推荐阅读