1

我正在重新设计一个 MVC3 应用程序,以将所有 linq 从控制器中取出并放入适当的层。

我把它作为我的结构 SQL --> EF --> Repository --> Service --> Controller。我正在使用接口。

编译时出现此错误:

gpc.data.service.roleService 没有实现接口成员 gpc.data.interfaces.iroleservice.HolderNamesbyRoleID(int)。

我对适当的架构完全陌生,所以如果这非常明显,我很抱歉哈哈。这是一些代码:

存储库:

namespace gpc.Data.Repositories
{
public class roleRepository :gpc.Data.Interfaces.IRoleRepository
{
private gpc.Models.gpcEntities _entities = new Models.gpcEntities();


public HolderNames HolderNamesbyRoleID(int roleid)
{
return (from i in _entities.HolderNames
where i.roleid == roleid select i).FirstOrDefault();              
}
}
}

然后我有一个界面:

namespace gpc.Data.Interfaces
{
public interface IRoleRepository
{
HolderNames HolderNamesbyRoleID(int roleid);
}
}

然后我有服务:

namespace gpc.Data.Service
{
public class roleService : gpc.Data.Interfaces.IRoleService
{
    private ModelStateDictionary _modelState;
    private gpc.Data.Interfaces.IRoleRepository _repository;

    public roleService(ModelStateDictionary modelState)
    {
        _modelState = modelState;
        _repository = new gpc.Data.Repositories.roleRepository();
    }
    public roleService(ModelStateDictionary modelState,                                    
    gpc.Data.Repositories.roleRepository repository)
    {
        _modelState = modelState;
        _repository = repository;
    }


    public HolderNames HolderNames(int roleid)
    {
        return _repository.HolderNamesbyRoleID(roleid);
    }
}
}

然后我有另一个界面:

namespace gpc.Data.Interfaces
{
public interface IRoleService
{
    HolderNames HolderNamesbyRoleID(int roleid);
}
}

我在这个结构中创建了一个非常简单的 ienumerable,并且我能够通过控制器将数据获取到视图中,正如我所期望的那样。我想因为这个比选择所有内容并把它扔到一个视图中要复杂一些,所以我一定错过了一些东西。我不知道这是否有所不同,但“holdernames”是一个 SQL 视图,而不是一个表。

非常感谢任何帮助

4

2 回答 2

0

接口只包含签名。您必须在实现接口的类中编写实际实现。在您的情况下,您已经在 IRoleRepository 中 定义了HolderNamesbyRoleID方法,但您尚未在roleService类中实现此方法。您必须在roleService类中实现HolderNamesbyRoleID 。

您的roleService类代码如下所示。

namespace gpc.Data.Service
{
public class roleService : gpc.Data.Interfaces.IRoleService
{
    private ModelStateDictionary _modelState;
    private gpc.Data.Interfaces.IRoleRepository _repository;

    public roleService(ModelStateDictionary modelState)
    {
        _modelState = modelState;
        _repository = new gpc.Data.Repositories.roleRepository();
    }
    public roleService(ModelStateDictionary modelState,                                    
    gpc.Data.Repositories.roleRepository repository)
    {
        _modelState = modelState;
        _repository = repository;
    }


    public HolderNames HolderNamesbyRoleID(int roleid)
    {
        return _repository.HolderNamesbyRoleID(roleid);
    }
}
}

有关更多信息,请参阅界面

于 2012-09-06T12:43:09.847 回答
0

这基本上就是您的编译器错误显示的内容。您的IRoleService接口定义了一个名为 的方法HolderNamesbyRoleID,但在您的实现中您只有一个名为 的方法HolderNames

我认为这只是您的错误输入。

于 2012-09-06T12:30:28.623 回答