C# 我实现NHibernate存储库模式时遇到的问题

C# 我实现NHibernate存储库模式时遇到的问题,c#,design-patterns,fluent-nhibernate,C#,Design Patterns,Fluent Nhibernate,我正在同一个解决方案文件中的一个单独的项目(项目B)中为我的项目(项目A)设置单元测试。我的问题是,我无法访问所有存储库中的任何方法进行测试。我已经在项目B中为项目a的存储库设置了一个引用,并且我能够实例化项目B中的任何存储库。我只是无法访问它们的接口提供的任何方法 下面是我的一个实体的类、接口和存储库的示例。所有其他实体都遵循相同的体系结构模式 类别: public class MyConfiguration { public virtual int Id { get; protect

我正在同一个解决方案文件中的一个单独的项目(项目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();
    }
}

我想我的问题是,我的接口实现是否正确?

您使用的是“显式”实现形式

这意味着您确实不能在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();
    }
    ...
}

就是这样,尽管我很好奇你是否知道一种更好的方法来实现接口,这样我就不必将存储库强制转换到接口上了?你看到我上次的编辑了吗?一般来说,您永远不会直接使用显式实现对象,您将从某些工厂模式或注入层获得接口。