gpt4 book ai didi

c# - 贪婪构造和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-03 10:36:12 25 4
gpt4 key购买 nike

对于我正在做的一个项目,我决定采用 MVVM 模式。

我的 View 模型需要启动许多不同的对话框,这些对话框不仅仅是显示 OK 或 Cancel 按钮。大多数对话框都有一个 ListView 来从中选择一个项目。

为了保持 View 模型“无外观”,我将不同的对话框作为接口(interface)注入(inject)到 View 模型构造函数中。

public ContractsData(IWindow ProjectSelector, IWindow ContractSelector, IWindow DebtorSelector)
{
//.....
//.....
m_ProjectSelector = ProjectSelector;
m_ContractSelector = ContractSelector;
m_DebtorSelector = DebtorSelector;
}

IWindow 是:
public interface IWindow
{
void Close();
bool? ShowDialog();
void SetOwner(object window);
bool? DialogResult { get; set; }
object DataContext { get; set; }
}

无论从测试的角度来看,能够从 View 中分离数据是多么美好,所有可能需要的对话窗口都必须存在并在构建 View 模型时完全构建,这违背了我的原则之一,即“延迟初始化” ":只在需要的时候构造一个对象。
随着我的 View 模型的增长,它可能需要一大堆对话框,它们都将在前面创建并在内存中休眠直到需要,这很可能永远不会。

我正在考虑用轻量级“工厂”对象替换实际对话框,这些对象根据 View 的请求构造对话框,但我正在寻找更好的解决方案来解决依赖注入(inject)的内存问题。

最佳答案

如果您使用依赖注入(inject)容器,它们中的大多数将具有注入(inject) Lazy<T> 的功能。 .所以而不是IWindow你可以依赖 Lazy<IWindow> .没有任何特殊注册,他们很聪明地注入(inject) Lazy<T> 为你。

如果你使用的是穷人的注入(inject),你可以手动构造Lazy<IWindow>并注入(inject)它。否则 Abstract factory是另一个不错的选择。

关于c# - 贪婪构造和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27419287/

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