如何让一个类使用特定的方法?

时间:2014-11-20 13:15:53

标签: c# asp.net-mvc nhibernate

我正在努力改进我编写代码的方式,这是我最近遇到的问题之一,它给了我很多的基础。

我正在使用NHibernate作为ORM。

在我的存储库中,我使用静态类(即NHibernateHelperScheduler)来打开会话:

public class PlannedShiftsRepository : Repository<PlannedShiftsEvent>
{
    ///<summary>
    ///Get all records for provided machine_id
    ///</summary>
    public IList<PlannedShiftsEvent> SelectForMachine(string machine_id)
    {
        using (ISession session = NHibernateHelperScheduler.OpenSession())
        {
            var myList = session.Query<PlannedShiftsEvent>().Where(c => c.machine_id == machine_id).ToList();

            return myList;
        }
    }
    }

问题是我有多个NHibernateHelper类,它们具有不同配置,适用于某些配置方面不同的不同数据库。

public class NHibernateHelperScheduler
{

    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {

                var NHibernateConfig = new Configuration();
                NHibernateConfig.Configure(HttpContext.Current.Server.MapPath(
                @"~\Models\NHibernate\hibernate.cfg.xml"), "Scheduler");
                NHibernateConfig.AddDirectory(new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath(
                 @"~\Models\NHibernate\Mapping\Scheduler")));
                _sessionFactory = NHibernateConfig.BuildSessionFactory();
            }
            return _sessionFactory;
        }
    }

    public static ISession OpenSession()
    {
        return SessionFactory.OpenSession();
    }
}

这导致了一些问题,因为存储库可以使用不同的配置文件并且工作正常,没有人会注意到错误。对于不同的配置,repo的结果将始终为0.不会有任何错误。

现在我的问题是:

如何使存储库使用特定的类。

例如,对于obj类型,PlannedShiftsEvent仅使用静态类NHibernateHelperScheduler中的方法。是否应该通过接口使用某种合同?

干杯!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这听起来更像是一个设计问题。我建议研究一些GOF设计模式,例如Br​​idge和Visitor设计模式。我看到你已经在使用Factory模式的一个很好的实现,所以也许你应该看看其他一些。