1

私はMVC3アプリを再設計して、すべてのlinqをコントローラーから適切なレイヤーに移動しています。

これを構造SQL->EF->リポジトリ->サービス->コントローラーとして取得しました。インターフェイスを使用しています。

コンパイルすると、次のエラーが発生します。

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);
}
}

この構造で非常に単純な数え切れないほどのデータを作成し、予想どおりにコントローラーを介してビューにデータを取得することができました。これはすべてを選択してビューに投げるよりも少し複雑なので、何かを見逃したに違いないと思います。違いがあるかどうかはわかりませんが、「holdernames」はテーブルではなくSQLビューです。

どんな助けでも大歓迎

4

2 に答える 2

0

これは基本的に、コンパイラエラーが示すものです。IRoleServiceインターフェイスは、という名前のメソッドを定義しHolderNamesbyRoleIDますが、実装では、という名前のメソッドしかありませんHolderNames

これはあなたの側の単なるミスタイプだと思います。

于 2012-09-06T12:30:28.623 に答える
0

インターフェイスには署名のみが含まれています。インターフェイスを実装したクラスで実際の実装を作成する必要があります。あなたの場合、 IRoleRepositoryHolderNamesbyRoleIDメソッドを定義していますが、 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 に答える