【发布时间】:2013-01-31 10:08:10
【问题描述】:
我不知道如何正确管理 C# 中的接口。我的目标是为我的业务层服务创建一个抽象类,该类具有一些通用方法(如 Save()、Dispose()),它们调用不同的 DAL 存储库方法。我希望避免在我的所有服务中重复以下内容:
public Save()
{
repository.Save();
}
我有一个类似的场景:
界面
namespace Common
{
public interface IRepository
{
void Save;
void Dispose;
}
}
DAL
namespace DAL
{
public Repository : IRepository
{
public void Save() {};
public void Dispose() {};
public void Add() {}
}
}
BL
namespace BL
{
public abstrac BaseService
{
protected IRepository repository;
protected BaseService(IRepository repo)
{
repository = repo;
}
public Save()
{
repository.Save();
}
}
//...
//Tentative 1
public Service : BaseService
{
private Repository rep;
public Service()
: base(new DAL.Repository())
{
rep = base.repository; // ERROR: cannot convert IRepository to Repository
}
}
}
我也试过这个:
//Tentative 2
public Service : BaseService
{
private IRepository rep;
public Service()
: base(new DAL.Repository())
{
rep = base.repository; // OK
}
public void Add()
{
rep.Add() // ERROR: IRepository doesn't contain a definition for 'Add'
}
}
我知道我可以在接口中定义我想使用的所有方法,但我将不得不处理泛型类型的很多问题,而且,正如你应该从我的问题中理解的那样,我很新在 C# 中,我希望避免复杂性是可能的,至少我会更专业:)
【问题讨论】:
-
因为(我刚刚更新了帖子)我想在基类中包装一些基本相同的公共方法(Save())但引用不同的 DAL 存储库..希望你可以理解我..我对 C# 和英语都有问题 ;)
标签: c# interface n-tier-architecture multi-tier