我如何摆脱一个空接口

时间:2018-07-03 14:08:14

标签: c# dependency-injection interface

我了解空接口很可能是代码的味道。我发现自己正在使用它,而我却找不到设计缺陷。

我有一个DBServer抽象类,名为Server

public abstract class Server
    {
        protected ICustomerRepository CustomerRepository;
        public string HostName{ get; }

        protected Server(string HostName)
        {
            this.HostName = HostName;
        }

        protected GetCustomers()
        {
            return CustomerRepository.GetCustomers();
        } 
    }

由于我使用两个数据库引擎(例如A和B),所以我有两个实现。

实施A要求ICustomerRepository用于A,例如ACustomerRepository

但是,为了能够对A的实现进行单元测试,我将使用接口IACustomerRepository并注入依赖项。

问题在于此接口为空。

 public interface ICustomerRepository
    {
        string HostName { get; set; }
        IEnumerable<ICustomer> GetCustomers();
    }


public interface IACustomerRepository:ICustomerRepository
{
}

此接口实现了从数据库中检索引擎A的逻辑:

class ACustomerRepository : IACustomerRepositoryRepository
{
    public IEnumerable<ICustomer> GetCustomers()
    {
        //Data retrieval logic...
    }
}

该实现通过Unity注入A的Server实现中:

public class ServerA: Server
    {
        public ServerA (
            string HostName,
            IACustomerRepository ACustomerRepository):
            base(HostName)
        {
            CustomerRepository = ACustomerRepository;
            ACustomerRepository.HostName = HostName;
        }
    }

统一配置:

container.RegisterType<IACustomerRepository, ACustomerRepository>();

我已经阅读了有关“标记接口”的信息,但我不确定它是否适用于此。

您能帮我找出潜在的问题,以便解决此代码异味吗?

0 个答案:

没有答案