c# - 解决 .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
,而不是 ProcessData 类中的具体实现MemberInfo
。为了使定义和实现之间的区别更加清晰,您可能需要添加一个接口,如本答案中所指出的那样。
如果你想让两种类型都指向同一个实现,但又不想在同一个范围内有多个实例,你可以这样做:
services.AddScoped<MemberInfo>();
services.AddScoped<Member>((serviceProvider) => serviceProvider.GetRequiredService<MemberInfo>());
推荐阅读
- numpy - Tensorflow 矩阵乘法比 numpy 慢
- php - Mysql从2个表中的2列完全搜索
- reinforced-typings - 如何在不创建无效导入的情况下引用外部库类型
- python-3.x - 如何使用 python 脚本将用户在我的网站上上传的文件存储到 azure 上?
- r - 如何在 R 中使用 smotefamily 处理分类变量?
- javascript - CryptoJS 说 Crytpo.js 文件未找到错误
- oracle-sqldeveloper - sqldeveloper 加载数据库内容的时间太长
- java - 如何实现搜索按钮到 android Firebase 数据库?
- php - 我有一个功能,我想使用自定义插件中的函数添加到 single.php 页面中。我怎样才能?
- tensorflow - UnsatisfiableError:冲突 - keras-gpu - tensorflow-base