Dot-Net
在 Ninject 中將單例綁定到多個服務
我有一個問題,看起來與http://markmail.org/message/6rlrzkgyx3pspmnf中描述的問題非常相似,如果您使用不同的服務類型訪問它,單例實際上會創建多個實例。
我正在使用最新版本的 Ninject 2 for Compact Framework,我遇到的確切問題是,如果我將相同的提供程序方法綁定到:
Func<Service> serviceCreator = () => new Service(false); kernel.Bind<IService>().ToMethod(serviceCreator).InSingletonScope(); kernel.Bind<Service>().ToMethod(serviceCreator).InSingletonScope();如果我同時解析為 IService 和 Service,它似乎正在創建 2 個服務實例。
這在解析 Service 時會導致循環依賴異常。
這是設計使然,還是錯誤?
在 V3 中,終於有了新的重載
Bind形式的解決方案,請參閱相關:問題。如果要共享單例,則需要將第二個更改
Bind為:kernel.Bind<Service>().ToMethod(()=>kernel.Get<IService>()).InSingletonScope();再循環引用和混淆等。內部隱式自綁定將為服務添加隱式綁定註冊。您應該發布異常。
編輯:重新發表您的評論。如果你這樣做:
Func<Service> serviceCreator = () => new Service(false); kernel.Bind<Service>().ToMethod(serviceCreator).InSingletonScope(); kernel.Bind<IService>().ToMethod(()=>kernel.Get<Service>()).InSingletonScope();然後在 Resolved 時不會生成隱式 Class Self Binding
IService- 它使用現有的。最近幾週這裡有另一個關於 SO 的問題,有人正在做這類事情,但遇到了 IInitializable 的問題- 該範例的順序正確,但根據我對原始碼的閱讀和輸入方式,上述範例是有道理的它生成隱式類自綁定。