我刚开始使用mvvm light toolkit中的SimpleIOC。我只是想知道是否有一个选项可以将参数化构造函数作为PreferredConstructor?
SimpleIOC是否提供此功能?如果是这样,在尝试从容器中解析对象时如何传递参数。
我可以轻松地为参数较少的构造函数执行此操作,如 -
SimpleIoc.Default.Register<MyClass>();
SimpleIoc.Default.GetInstance<MyClass>().MyMethod();
但是,问题是如何为具有参数的构造函数实现此目的?
答案 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。