我创建了一个示例项目来尝试一些新模式,即 Dao 和 IoC。
My Dao 定义如下:
public class Dao<T> : IDao<T>
{
protected NHibernate.ISessionFactory _sessionFactory;
public Dao(NHibernate.ISessionFactory sessionFactory)
{
this._sessionFactory = sessionFactory;
}
protected NHibernate.ISession Session
{
get { return _sessionFactory.GetCurrentSession(); }
}
public T GetById(object id)
{
return Session.Get<T>(id);
}
...
}
我有一个相应的安装程序:
public class DaoInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For(typeof(Data.IDao<>))
.ImplementedBy(typeof(Data.Dao<>))
.ServiceOverrides(ServiceOverride.ForKey("SessionFactory").Eq("FirstSessionFactory"))
.Named("FirstDao"));
}
}
使用 MVC 模式,我可以定义一个带有构造函数的控制器,该构造函数将接受IDao<MyClass> myClass
作为参数,Windsor 将为我完成所有使用正确 SessionFactory 实例化 Dao 的魔法。我的问题是,如何在非 MVC 环境中实现相同的行为?那么在任何特定页面上,我如何获取 myClass 的实例?