我仍然是依赖注入的新手,似乎我错过了一些东西。
我使用Autofac作为我的容器来解析每个存储库对NHibernate会话的依赖。
会话接收SystemSetting的依赖关系,它几乎只包含MySql连接字符串。
在应用程序开始时,我配置所有已注册的依赖项,包括SessionFactory的初始化。
情况是,如果连接字符串错误,应用程序将抛出一个编译时异常,它无法使用提供的连接字符串连接到MySql。如果我想允许这种错误配置,那么用户可以设置他自己的正确的,比方说ip地址怎么办?
我的问题是,我无法将应用程序提供给登录表单,因为登录表单将用户存储库作为依赖关系接收,而依赖关系又接收一个假定的活动会话,因此抛出异常。
我应该从Autofac配置中排除NHibernate会话的创建吗?
答案 0 :(得分:1)
我很确定在注入单身生命周期范围ISessionFactory
而不是ISession
时会更好。
这意味着每个组件都注入了一个ISessionFactory
实例,并且每个组件都创建了自己的ISession(如果需要,还可以创建多个ISessions
)。
对于关键字检查,默认情况下,NHibernate在构建ISessionFactory
时会短暂连接到数据库以检查保留关键字(用于模式/ DDL创建)。您可以禁用它,因此第一次与数据库的连接将在第一次ISession
使用时进行。