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

Invoke constructor with parameter in MVVM light SimpleIOC

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

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

我可以轻松地为无参数构造函数执行此操作,例如-

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

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

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

你基本上创建了一个IMyClassFactory接口并在应用层实现它。您的 类 将具有 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。