我有以下類的ASP.NET web應用程序的生命週期的類:辛格爾頓注入其中持續該請求
public class AppContext : IAppContext {
private readonly IDataContext _dataContext;
public AppContext(IDataContext dataContext) {
_dataContext = dataContext;
}
...
}
public class DataContext : IDataContext {
...
}
這些是使用Untity像這樣註冊:
container.RegisterType<IAppContext, AppContext>(new ContainerControlledLifetimeManager());
container.RegisterType<IDataContext, DataContext>(new PerRequestLifetimeManager());
AppContext是一個單例,並且在應用程序的整個生命週期中都存在,但DataContext只在當前請求的整個生命週期內存在。
然而,由於在DataContext是AppContext類將跨請求持久化的構造函數中注入。這會導致問題,因爲DataContext在請求結束後處理。我怎麼能在AppContext類中注入DataContext,以便我可以檢索正確的實例?
如果'AppContext'是一個signelton,如果它有一個公共構造函數? –
您所遇到的問題是一個常見的陷阱,通常被稱爲[圈養依賴](http://blog.ploeh.dk/2014/06/02/captive-dependency/)。 – Steven
@ZoharPeled OP是*** ***不談論[Singleton設計模式](https://en.wikipedia.org/wiki/Singleton_pattern),但關於**的Singleton生活方式**這是一個常見的術語,當談論依賴注入和IoC容器。 – Steven