2016-09-10 27 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

感謝。我認爲我會將會話工廠注入單例,並讓服務自己創建會話 –

相關問題