簡短的版本是,我想註冊一個Unity接口的可能實現,但這些實現可能不可用,具體取決於應用程序配置。Unity中的條件解決?
具體來說,這些是ASP.NET身份(電子郵件,短信等)的雙因素實現。他們的參數在web.config中設置,並且在某些環境中可能無法使用(例如,我們無法從我們的開發筆記本電腦發送電子郵件)。
我想使用ResolveAll來獲取可用的,並且只需註冊適當的InjectionFactories,如果它們不可用,則返回null。但是,這確實會導致調用ResolveAll中的空項目。
基本上,我想要的是相當於在InjectionFactory Func
內向Unity發送信號的能力,「沒關係;我實際上無法解決此問題,對不起;不要將我用作註冊源」。
這是可能的不:
- 分裂了從註冊本身 「可以註冊」,所以基本上
if (CanRegisterEmailTwoFactor) container.Register<ITwoFactor>("Email", new InjectionFactory(CreateEmailTwoFactor))
- 要求所有的
ResolveAll
調用排除空
注也可能有兩個相互競爭的註冊(例如,內部SMTP vs SendGrid),並且默認行爲將僅返回最後一個所以我也想避免第二個,不可用的用null覆蓋第一個。
你可以使用[空對象模式](https://sourcemaking.com/design_patterns/null_object)嗎? –
不是真的;這些項目會在下拉列表中顯示給用戶。 –