没有为此对象定义无参数构造函数。 MVC 5

Posted

技术标签:

【中文标题】没有为此对象定义无参数构造函数。 MVC 5【英文标题】:No parameterless constructor defined for this object. MVC 5 【发布时间】:2021-12-21 01:24:23 【问题描述】:

当我尝试使用 .NET Framework(4.7.2) 和 EF Core(3.0) 进行编码时遇到问题,因为我通常使用 .NET Core。 当我尝试注入存储库时(通过它的接口)。

这是我的代码

SenderController.cs

public class SenderController : Controller

    private readonly ISenderRepository _sRepo;
    public SenderController(ISenderRepository sRepo)
    
        _sRepo = sRepo;
    

    public ActionResult Index()
    
        return View();
    

ISenderRepository.cs

 public interface ISenderRepository

    ICollection<Sender> GetSenders();
    Sender GetSender(int senderId);
    bool SenderExists(string name);
    bool SenderExists(int id);
    bool CreateSender(Sender sender);
    bool UpdateSender(Sender sender);
    bool DeleteSender(Sender sender);
    bool Save();

这就是我得到的

我认为我在 MVC 5 中为依赖注入做错了。你能帮我做吗? 谢谢你:)

【问题讨论】:

“我在尝试使用 .NET Framework(4.7.2) 和 EF Core(3.0) 进行编码时遇到问题” - 选择一个。 你能发布 SenderRepository 类吗?问题很可能在实施中。不在界面中。 对不起,我只是通过在构造函数中使用它来找到答案:private ISenderRepository _sRepo; public SenderController() this._sRepo = new SenderRepository(new Data.ApplicationDbContext()); 你能展示你的依赖注入配置吗? 【参考方案1】:

确保你必须注入你的控制器,你可以使用 Autofac 来帮助你

【讨论】:

【参考方案2】:

我只是通过在构造函数中使用这个语句来修复它:

private ISenderRepository _sRepo;
    public SenderController()
    
        this._sRepo = new SenderRepository(new Data.ApplicationDbContext());
    

谢谢

【讨论】:

这不是修复,只是没有使用依赖注入。太糟糕了。 那么如何真正解决它? 正如您所写,您的 DI 配置不正确。请将其添加到您的问题中。 当我在 Core 中使用 DI 时我仍然感到困惑,只需添加 AddScoped 。我可以在 .net Framework 的什么地方使用它? 在 .NET Framework 中,您必须使用第三方 DI 库(Simple Injector 是我最喜欢的,但 YMMV),并使用 DependencyResolver.SetResolver() API 将其拼接到 MVC。以下是 Simple Injector 的工作方式:docs.simpleinjector.org/en/latest/mvcintegration.html

以上是关于没有为此对象定义无参数构造函数。 MVC 5的主要内容,如果未能解决你的问题,请参考以下文章

没有为此对象定义无参数构造函数。在剑道网格中

ExpressMapper / EntityFramework - 没有为此对象定义无参数构造函数

ASP.NET Core Identity UserManager<ApplicationUser> -Error 没有为此对象定义无参数构造函数

是否可以在 WCF 中没有无参数构造函数的情况下序列化对象?

构造函数与析构函数

c+学习记录