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

时间:2015-02-04 13:38:21

标签: c# mvvm mvvm-light ioc-container

我刚开始使用mvvm light toolkit中的SimpleIOC。我只是想知道是否有一个选项可以将参数化构造函数作为PreferredConstructor?

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您基本上创建了一个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。