【发布时间】:2010-04-03 14:13:50
【问题描述】:
我已经设置了一个 NInject(使用 1.5 版)绑定,如下所示:
Bind<ISessionFactory>().ToMethod<ISessionFactory>(ctx =>
{
try
{
// create session factory, might fail because of database issues like wrong connection string
}
catch (Exception e)
{
throw new DatabaseException(e);
}
}).Using<SingletonBehavior>();
如您所见,此绑定使用单例行为,但也可能在配置不正确时引发异常,例如与数据库的连接字符串错误。
现在,当会话工厂的创建一开始失败(抛出数据库异常)时,NInject 不会再次尝试创建对象,而是始终返回 null。
我需要 NInject 首先检查 null 并在实例为 null 时重新创建,但当然不是在已经成功构造实例时(保持它为单例)。像这样:
var a = Kernel.Get<ISessionFactory>(); // might fail, a = null
// ... change some database settings
var b = Kernel.Get<ISessionFactory>(); // might not fail anymore, b = ISessionFactory object
我需要编写自定义行为还是缺少其他内容?
【问题讨论】:
标签: singleton inversion-of-control ninject sessionfactory