我实现NHibernate Repository模式的问题

时间:2014-03-05 20:17:15

标签: c# design-patterns fluent-nhibernate

我正在同一个解决方案文件中的单独项目(项目B)中为我的项目(项目A)设置单元测试。我的问题是我无法访问所有存储库中的任何方法进行测试。我已经在项目B中为项目A的存储库设置了参考,我能够在项目B中实例化任何存储库。我只是无法访问其接口提供的任何方法。

这是我的一个实体的类,接口和存储库的示例。所有其他实体都遵循相同的架构模式。

类别:

public class MyConfiguration
{
    public virtual int Id { get; protected set; }
    public virtual string DefaultLocation { get; set; }
    public virtual string FolderLocalPath { get; set; }
    public virtual string DefaultPrinter { get; set; }
    public virtual int DefaultPrinterLabelAmount { get; set; }
    public virtual string DefaultCompanyName { get; set; }
    public virtual bool CompanyNameEnabled { get; set; }
    public virtual bool TimestampLabelEnabled { get; set; }
    public virtual bool CollectionFeeEnabled { get; set; }
}

接口:

interface IMyConfigurationRepository
{
    void CreateConfig(MyConfiguration config);
    void UpdateConfig(MyConfiguration config);
    MyConfiguration GetConfig();
}

存储库:

public class MyConfigurationRepository : IMyConfigurationRepository
{
    void IMyConfigurationRepository.CreateConfig(MyConfiguration config)
    {
        throw new NotImplementedException();
    }

    void IMyConfigurationRepository.UpdateConfig(MyConfiguration config)
    {
        throw new NotImplementedException();
    }

    MyConfiguration IMyConfigurationRepository.GetConfig()
    {
        throw new NotImplementedException();
    }
}

我想我的问题是,我正在进行接口实现吗?

1 个答案:

答案 0 :(得分:2)

您正在使用“显式”实施形式。

这意味着您确实无法在Repsoitory的实例上调用方法。您需要将其强制转换为界面:

var repo = new MyConfigurationRepository ();
var gate = (IMyConfigurationRepository) repo;

repo.CreateConfig(...);   // won't compile        
gate.CreateConfig(...);   // OK

如果您想要的话,这取决于您的其他架构。另一种方法是隐式实现:

public class MyConfigurationRepository : IMyConfigurationRepository
{
    //void IMyConfigurationRepository.CreateConfig(MyConfiguration config)
    public void CreateConfig(MyConfiguration config)
    {
        throw new NotImplementedException();
    }
    ...
}