【发布时间】:2017-05-01 00:43:12
【问题描述】:
如果这个问题已经得到解答,我们深表歉意。我已经搜索过,但找不到解决方案。
如何在#5 中的 MVC 中注入带有构造函数参数的类?甚至有可能吗?
对于下面的代码,由于缺少 sqlContext 参数,无法构造注入的 MyHelper1,因此会报错。
这是我的(简化的)对象:
// 1. HELPER CLASS TO INJECT
public class MyHelper1 : HelperBase, IHelper
{
public MyHelper1(IHelperSqlContext sqlContext) : HelperBase(sqlContext)
public override string HelperTag { get; } = "HELPER1";
. . .
}
// 2. BASE HELPER
public abstract class HelperBase
{
private IHelperSqlContext _sqlContext;
abstract public string HelperTag { get; }
public HelperBase(IHelperSqlContext sqlContext)
{
_sqlContext = sqlContext;
}
public List<HelperRecords> GetRecords(Id id)
{
return _sqlContext.GetRecords(id);
}
. . .
}
// 3. INTERFACE
public interface IHelper
{
. . .
}
// 4. CONTROLLER
public class MyController : Controller
{
IHelper _myHelper
public MyController(IHelper myHelper)
{
_myHelper = myHelper;
}
public IActionResult Index(Id id)
{
var model = new MyViewModel();
model.MyRecords = _myHelper.GetRecords(id);
return View(model);
}
}
// 5. STARTUP - INJECT PART
public class Startup
{
. . .
public void ConfigureServices(IServiceCollection services)
{
. . .
// How to pass MyHelper1 class with IHelperSqlContext here???
services.AddTransient<IHelper, MyHelper1>();
}
}
感谢任何帮助。提前致谢。
【问题讨论】:
-
您应该以official Microsoft Documentation 开头。这是相当不错的。如果您之后有任何具体问题,请在此处发布新问题。
-
谢谢@Steven。我读过它,我认为我的问题类似于那部分 => public CharacterRepository(ApplicationDbContext dbContext) 。 .在 ConfigureServices 中, services.AddDbContext
(options => options.UseInMemoryDatabase() );这 => services.AddScoped ();就像 NKosi 下面的建议一样。我的问题是出现编译错误,提示“IServiceCollection 不包含 AddDbContext”。潜在修复显示“添加包 MS EntityFrameworkCore 1.1.0。我们没有使用实体框架。
标签: c# dependency-injection asp.net-core-mvc