目前我的存储库有2个构造函数。当我从我的mvc网站打电话给我时,我一直在呼叫第一个构造函数,因此打开一个新的会话。我应该通过会议吗?我应该如何做到这一点。nhibernate:存储库会话管理
public CompanyRepository()
{
_session = NHibernateHelper.OpenSession();
}
public CompanyRepository(ISession session)
{
_session = session;
}
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(UserProfile).Assembly);
configuration.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName,
System.Environment.MachineName);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
我正在使用Ninject IOC容器(对我来说很新)。我有以下容器。我如何将ISession绑定到CompanyRepository。
private class EStoreDependencies : NinjectModule
{
public override void Load()
{
Bind<ICompanyRepository>().To<CompanyRepository>();
Bind<IUserProfileRepository>().To<UserProfileRepository>();
Bind<IAddressRepository>().To<AddressRepository>();
Bind<IRolesService>().To<AspNetRoleProviderWrapper>();
Bind<IUserService>().To<AspNetMembershipProviderWrapper>();
Bind<ICurrentUserSerivce>().To<DefaultCurrentUserSerivce>();
Bind<IPasswordService>().To<AspNetMembershipProviderWrapper>();
Bind<IStatusResponseRepository>().To<StatusResponseRepository>();
Bind<ICategoryRepository>().To<CategoryRepository>();
Bind<IProductRepository>().To<ProductRepository>();
}
}
我认为,我正在使用ninject(上面添加的代码)。我如何将会话绑定到CompanyRepository。对不起,这一切还没有点击。 – frosty 2010-06-04 12:08:57
'绑定()。到()。WithConstructorArgument(“session”,NHibernateHelper.OpenSession());'可能有其他方法来做到这一点。 –
2010-06-04 12:34:59