gpt4 book ai didi

c# - 在 MVVM light SimpleIOC 中调用带参数的构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:37 25 4
gpt4 key购买 nike

我刚刚开始使用 mvvm light 工具包中的 SimpleIOC。我只是想知道是否可以选择将参数化构造函数作为 PreferredConstructor?

此功能是否适用于 SimpleIOC?如果是这样,我将如何在尝试从容器中解析对象时传递参数。

对于无参数构造函数,我可以很容易地做到这一点——

SimpleIoc.Default.Register<MyClass>();
SimpleIoc.Default.GetInstance<MyClass>().MyMethod();

但是,问题是如何为带参数的构造函数实现此目的?

最佳答案

您需要应用抽象工厂模式。

您基本上创建了一个IMyClassFactory 接口(interface)并在应用层实现它。您的类将有 IMyClassFactory 作为依赖项,而不是 MyClass

public interface IMyClassFactory 
{
// For simplification it returns MyClass. For sake of decoupling,
// it should return IMyClass interface which is implemented by MyClass
MyClass Create(string myParameter);
}

// In your application layer, if you use n-layered architecture
public class MyClassFactory : IMyClassFactory
{
public MyClass Create(string myParameter)
{
return new MyClass(
SimpleIoc.Default.GetInstance<Dependency1>(),
SimpleIoc.Default.GetInstance<Dependency2>(),
myParameter
);
}
}

然后在你的 ViewModel 中做

public class SomeViewModel
{
private readonly MyClass myClass;
public SomeViewModel(IMyClassFactory myClassFactory)
{
myClass = myClassFactory.Create("MyParameter");
}
}

旁注:不要将 Singleton 用于 IoC,它在某种程度上违背了 IoC 容器的目的,它变成了一个纯粹的 ServiceLocator。

关于c# - 在 MVVM light SimpleIOC 中调用带参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28322831/

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