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 のインスタンスを取得するにはどうすればよいでしょうか?