gpt4 book ai didi

c# - Caliburn.Micro - 使用 CaSTLe.Windsor 从 IoC 容器解析 ViewModel

转载 作者:行者123 更新时间:2023-11-30 21:13:16 24 4
gpt4 key购买 nike

我正在使用 Caliburn.Micro 构建一个复合 UI 应用程序,并决定使用 CaSTLe Windsor 构建 ViewModel 对象,这样他们需要操作的任何服务都可以自动注入(inject)并避免 servicelocator 反模式。

问题是 CaSTLe Windsor 正在使用属性注入(inject)将我的 View 模型对象的 ActiveItem 属性设置为(似乎是它找到的第一个与 IScreen 服务匹配的组件)因为它解决了它们。

我不希望它这样做,因为我想通过调用 ActivateItem() 自己设置事件屏幕,当我计算出要为其呈现 View 的 View 模型时。

看起来 CaSTLe Windsor 不能执行属性注入(inject)(我正在使用流式注册 API 和 IWindsorInstaller 类),那么什么是在这里采取的好方法?

我是否应该从容器中解析 ViewModel 对象?如果不是,避免服务定位器反模式的好方法是什么?

非常感谢。

最佳答案

目前似乎有效的是:

_container.Kernel.ComponentModelCreated += model =>
{
IEnumerable<PropertySet> nonInjectableProperties = model.Properties
.Where(set => set.Property.Name == "ActiveItem").ToList();

foreach (PropertySet nonInjectableProperty in nonInjectableProperties)
{
model.Properties.Remove(nonInjectableProperty);
}
}

本质上,这是拦截组件的解析并从中删除其中一个属性,这样当组件被解析时,内核不再看到“ActiveItem”属性来查找依赖项。

关于c# - Caliburn.Micro - 使用 CaSTLe.Windsor 从 IoC 容器解析 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913361/

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