簡單注入功能InjectProperties
被標記爲不推薦使用,並將在未來版本中刪除。我將如何在Caliburn.Micro的BuildUp
重寫中使用它?該框架多次通過IoC.BuildUp
內部使用!Caliburn.Micro和Simple Injector - InjectProperties已被棄用 - 如何BuildUp()?
3
A
回答
6
InjectProperties
標記爲[Obsolete]
屬性,編譯器消息指向的URL爲https://simpleinjector.org/depr1,它提供了更詳細的信息。被引用的頁面解釋了爲什麼不推薦使用此方法以及如何更改您的代碼或配置。
該頁面還鏈接到Property Injection paragraph of the Extendibility Points page。本頁描述如何配置容器以啓用屬性注入。例如:
class PropertySelectionBehavior<TAttribute> : IPropertySelectionBehavior
where TAttribute : Attribute
{
public bool SelectProperty(Type type, PropertyInfo prop) {
return prop.GetCustomAttributes(typeof(TAttribute)).Any();
}
}
// Usage:
var container = new Container();
container.Options.PropertySelectionBehavior =
new PropertySelectionBehavior<MyInjectAttribute>();
這使容器注入與該[MyInject]
屬性明確標記屬性。
如果可能,請始終嘗試讓容器爲您創建類型,而不是使用默認構造函數的類型,然後注入屬性。然而我不熟悉Caliburn Micro,我不確定這是否可行。
如果您需要BuildUp類似的行爲,您可以從容器中檢索註冊並請求它爲您初始化現有實例。這將如下所示:
public void BuildUp(object instance)
{
var registration = this.container.GetRegistration(instance.GetType(), true);
registration.Registration.InitializeInstance(instance);
}
這允許容器初始化實例和通過Simple Injector pipeline這使得能夠根據給出的給定的登記和配置規則(如顯式屬性注射示例性噴射和其他初始化發送它以上)。
如果需要構建的類型具有默認的構造函數,這會很好用。如果不是這種情況,您必須創建(並緩存)一個新的Registration
實例,調用Lifestyle.Transient.CreateRegistration
並在該實例上調用InitializeInstance
,就像MVC集成包的SimpleInjectorFilterAttributeFilterProvider
一樣(您可以看看它的源代碼代碼here)。
相關問題
- 1. 如何在EasyNetQ上使用Simple Injector?
- 2. PlacePicker.getPlace()和GooglePlayServicesUtil.getErrorDialog()已被棄用
- 3. SMSManager已被棄用
- 4. FBML已被棄用?
- 5. RxJavaPlugins.getInstance已被棄用
- 6. reversibleTransformerWithForwardBlock已被棄用
- 7. getActionView已被棄用?
- 8. setAllowsImageEditing已被棄用?
- 9. requiredContentSizeIdentifiers已被棄用
- 10. devicesWithMediaType已被棄用
- 11. 我如何知道xaml已被棄用?
- 12. ActiveRecord :: Migrator.proper_table_name已被棄用
- 13. 如何使用Simple Injector註冊Drum.UriMaker <>?
- 14. Shiny DT「rows_selected」和「rows_all」已被棄用?
- 15. 的setText已被棄用
- 16. 用Simple Injector和.Net Core註冊數據庫上下文
- 17. C功能已被棄用
- 18. Parse.com fetchInbackground已被棄用?
- 19. [self presentModalViewController:composer animated:YES];已被棄用
- 20. Android:Gallery View已被棄用?
- 21. 錯誤:stringWithCString已被棄用
- 22. 如何解決PHP已棄用自動填充$ HTTP_RAW_POST_DATA已被棄用的問題?
- 23. C#Threading.Suspend已廢棄,線程已被棄用?
- 24. 如何在Simple Injector 3.0.0版中定義DefaultScopedLifestyle?
- 25. 在Simple Injector中創建和運行攔截器
- 26. Apps腳本getRowsData函數已被棄用?
- 27. 如果圖像已被丟棄,禁用圖像丟棄?
- 28. Ionic安裝任務已被棄用
- 29. getmap()已被棄用並使用getmapAsync?
- 30. Direct3D 11效果文件已被棄用?
感謝史蒂文那快速的迴應。我實際上讀過這個鏈接,但不知道如何運行通過容器管道在容器外部創建的實例。 – 2014-09-22 11:48:55
雖然我有點擔心,有沒有在容器中註冊的類型正在使用 - 只有它們的屬性。這一切都在框架內,我不確定內部工作原理... – 2014-09-22 11:51:41
@MarkusHütter:我對Caliburn和WPF沒有經驗,並且不確定在這裏提出什麼建議。你能否更新你的問題:給我一個鏈接到一些在線資源的鏈接,說明哪些類型需要「建立」以及它們是如何使用的? – Steven 2014-09-22 11:56:53