gpt4 book ai didi

dependency-injection - Caliburn.Micro 和简单注入(inject)器 - InjectProperties 已弃用 - 如何 BuildUp()?

转载 作者:行者123 更新时间:2023-12-04 08:23:15 25 4
gpt4 key购买 nike

InjectProperties 的简单注入(inject)器函数已标记为已弃用,并将在未来的版本中删除。我如何才能在 Caliburn.Micro 的 BuildUp 覆盖中使用它?该框架通过 IoC.BuildUp 在内部多次使用它!

最佳答案

InjectProperties 标记有 [Obsolete] 属性,编译器消息指向 URL https://simpleinjector.org/depr1它提供了更详细的信息。引用页面解释了为什么不推荐使用此方法以及如何为此更改代码或配置。

该页面还链接到 Property Injection paragraph of the Extendibility Points page .本页介绍如何配置容器以启用属性注入(inject)。例如:

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>();

这允许容器注入(inject)用 [MyInject] 属性显式标记的属性。

如果可能,请始终尝试让容器为您创建类型,而不是让类型具有默认构造函数并在之后注入(inject)属性。然而,我不熟悉 Caliburn Micro,我不确定这是否可行。

如果您需要类似 BuildUp 的行为,您可以从容器中检索注册并请求它为您初始化现有实例。看起来如下所示:

public void BuildUp(object instance)
{
var registration = this.container.GetRegistration(instance.GetType(), true);
registration.Registration.InitializeInstance(instance);
}

这允许容器初始化实例并通过 Simple Injector pipeline 发送它它根据给定的注册和配置规则启用属性注入(inject)和其他初始化(例如上面给出的显式属性注入(inject)示例)。

如果需要构建的类型具有默认构造函数,这会非常有效。如果不是这种情况,您将必须通过调用 Lifestyle.Transient.CreateRegistration 创建(并缓存)一个新的 Registration 实例并调用 InitializeInstance 在那个实例上,就像 MVC 集成包的 SimpleInjectorFilterAttributeFilterProvider 一样(你可以看看它的源代码 here )。

关于dependency-injection - Caliburn.Micro 和简单注入(inject)器 - InjectProperties 已弃用 - 如何 BuildUp()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com