我已经设置了一个 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
我需要编写自定义行为还是缺少其他内容?