编辑:在@mattytommo 帮助隔离错误的根本原因后,我发现 IStatementRepository.cs 文件未包含在项目中。将它包含在项目中解决了这种情况。

我正在尝试在我的 Controller 上实现一个存储库(加入了一些依赖注入(inject)),但我撞到了一堵墙。我定义了一个 IStatementRepository,但是,当我尝试使用 IStatementRepository 参数为 DI 目的创建构造函数时,出现以下错误:

The type or namespace name 'IStatementRepository' does not
exist in the namespace 'StatementsApplication.Models' (are
you missing an assembly reference?)

The type or namespace name 'IStatementRepository' could
not be found (are you missing a using directive or an
assembly reference?)

'StatementsApplication.Controllers.StatementController'
does not contain a definition for 'IStatementRepository'
and no extension method 'IStatementRepository' accepting a
first argument of type
'StatementsApplication.Controllers.StatementController'
could be found (are you missing a using directive or an
assembly reference?)

这是生成错误的代码块:
using StatementsApplication.Models;

namespace StatementsApplication.Controllers
{
    public class StatementController : Controller
    {
        public StatementsApplication.Models.IStatementRepository _repo;

        private DALEntities db = new DALEntities();

        public StatementController(IStatementRepository repository)
        {
            this.IStatementRepository = repository;
        }

        // additional controller actions here
    }
}

这是 IStatementRepository.cs 的全部内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using StatementsApplication.DAL;

namespace StatementsApplication.Models
{
    public interface IStatementRepository    {
        IEnumerable<Statement> findAll();
        IEnumerable<Statement> findByMerchantID(int id);
        Statement findByID(int id);
        Statement createStatement(Statement stmt);
        int saveChanges();
        void deleteStatement(int id);

    }
}

我不明白为什么我不能在这里使用界面。我所遵循的所有示例似乎都在使用这种通用模式,所以我希望我只是遗漏了一些简单的东西。

我将非常感谢您的意见。

最佳答案

您的构造函数有点偏离,您正在尝试执行 this.IStatementRepository ,但变量是 this._repo 。这些错误是因为 Visual Studio 告诉您在 IStatementRepository(您的 Controller ):) 中没有名为 this 的变量。

试试这个:

using StatementsApplication.Models;

namespace StatementsApplication.Controllers
{
    public class StatementController : Controller
    {
        public StatementsApplication.Models.IStatementRepository _repo;

        private DALEntities db = new DALEntities();

        public StatementController(IStatementRepository repository)
        {
            this._repo = repository;
        }

        // additional controller actions here
    }
}

关于c# - 命名空间中不存在“接口(interface)”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10805127/

10-10 08:52