2016-09-10 23 views
0

我有一个ISession作为Ctor依赖项的域服务。使用SimpleInjector注入ISession时的生活方式不匹配

public JobCreator(IMapper mapper, ISession session) 
{ 
    _mapper = mapper; 
    _session = session; 
} 

服务注册为单身

container.Register<IKindergardenCreator, KindergardenCreator>(Lifestyle.Singleton); 

的作为的Isession但是范围的登记,因为会议应该重新不止一次。

container.Register<ISession>(() => container.GetInstance<ISessionFactory>().OpenSession(), 
    Lifestyle.Scoped); 

当我运行该应用程序时,由于此配置,我得到一个“生活方式不匹配”​​。使用非单例服务配置单例服务的正确方法是什么?

回答

0

什么是正确的方式来配置单身服务与非单身服务?

异常信息是指下列文件

documentation about lifestyle mismatches介绍了如何解决违规:

  • 更改组件的生活方式,以一种生活方式,是短或短于依赖关系。
  • 将依赖关系的生活方式改变为长于或长于组件的生活方式。
  • 不是注入依赖项,而是注入一个工厂来创建该依赖项,并在每次需要实例时调用该工厂。

既然你不能增加的Isession依赖的生活方式,您应该降低你的消费分量(KindergardenCreator)的生活方式或注入工厂ISession代替。

如下您可以降低元件的生活方式:

container.Register<IKindergardenCreator, KindergardenCreator>(Lifestyle.Scoped); 

您还可以更改ISession依赖于Func<ISession>和其注册为工厂如下:

container.RegisterSingleton<Func<ISession>>(container.GetInstance<ISession>); 
+0

感谢。我认为我会将会话工厂注入单例,并让服务自己创建会话 –

相关问题