我有兩個場景,我想用Ninject.Extensions.Conventions解決。如何使用Ninject慣例綁定服務
第一個是一個簡單的問題:每當從包含單詞「service」的名稱空間請求一個實例時,返回唯一匹配類的單例實例。我試着像這樣:
Kernel.Bind(service => service.FromThisAssembly()
.Select(theClass => theClass.Namespace.Contains("Service"))
.BindDefaultInterface()
.Configure(binding => binding.InSingletonScope()));
其中一些服務得到解決,但我碰上ActivationException
當分辨率鏈達到一個地步,Impl1
有IService2
的依賴。
這個綁定有什麼問題?
的第二一個可能是同樣簡單。所有繼承BaseClass
的類都應通過方法實例化。這是我以前到現在的分辨率代碼,做每類:
Bind<MyViewModel>().ToMethod(ctx => fac.CreateProxy<MyViewModel>())
.InSingletonScope();
[注:在這種情況下,FAC是一個自定義的工廠,建造城堡代理]
哪有我從ViewModelBase
與Extensions.Conventions
繼承的班級做這樣的事情?
我想出了選擇部分已經在這裏。
Kernel.Bind(ViewModel => ViewModel.FromThisAssembly()
.Select(t => t.BaseType == typeof(ViewModelBase))
);
現在我需要的是工廠採取行動......
一般問題:
Extensions.Conventions的結合的方法似乎是準確的正常的反向:
Ninject:
Bind <Interface>() . To <Implementation>()
約定:
SelectAllClasses().BindDefaultInterface()
爲什麼會這樣,還是我誤解呢?
我曾經把我的綁定從NinjectModule派生的類,而且我preferrably繼續這樣做。在使用
Extensions.Conventions
時沒有這樣做的原因?
關於你的第一個例子你可以發佈一個示例如何嘗試解析服務名稱類型? – nemesv
這裏有一個示例,第一個代碼片段 –
沒有那是註冊部分,我對如何使用/解析註冊類型感興趣,因此您得到'ActivationException' – nemesv