我有一个域服务,它将ISession作为Ctor中的依赖项。
public JobCreator(IMapper mapper, ISession session)
{
_mapper = mapper;
_session = session;
}
该服务已注册为Singleton
container.Register<IKindergardenCreator, KindergardenCreator>(Lifestyle.Singleton);
然而,ISession被注册为作用域,因为会话应该重新打开多次。
container.Register<ISession>(() => container.GetInstance<ISessionFactory>().OpenSession(),
Lifestyle.Scoped);
当我运行应用程序时,我得到了一个&#34;生活方式不匹配&#34;因为这种配置。使用非单件服务配置单件服务的正确方法是什么?
答案 0 :(得分:0)
使用非单件服务配置单件服务的正确方法是什么?
异常信息涉及以下文档
documentation about lifestyle mismatches解释了如何修复违规行为:
- 将组件的生活方式改变为与依赖关系一样短或短的生活方式。
- 将依赖的生活方式改变为生活方式的长度或长度。
- 不是注入依赖项,而是注入工厂来创建该依赖项,并在每次需要实例时调用该工厂。
由于您不能提高ISession依赖关系的生活方式,您应该降低消费组件的生活方式(KindergardenCreator
)或者为ISession
注入工厂。
您可以按如下方式降低组件的生活方式:
container.Register<IKindergardenCreator, KindergardenCreator>(Lifestyle.Scoped);
您还可以将ISession
依赖关系更改为Func<ISession>
并将其注册为工厂,如下所示:
container.RegisterSingleton<Func<ISession>>(container.GetInstance<ISession>);