我有一个使用MVVM Light
的wpf应用程序。我有两个类和接口(interface):
public interface ICrud{
//
}
public class CrudDAO : ICrud{
//
}
public class CrudEF : ICrud{
//
}
我有两个viewmodels:
public class CrudDAOVM {
public ICrud icrud;
public CrudDAOVM (ICrud _icrud)
{
icrud = _icrud;
}
}
public class CrudEFVM {
public ICrud icrud;
public CrudEFVM (ICrud _icrud)
{
icrud = _icrud;
}
}
我想使用 SimpleIoc 注入(inject)缺陷。因此,我将此代码添加到 ViewModelLocator 中:
SimpleIoc.Default.Register<ICrud , CrudDAO >(); //I'd like to add the condition here
SimpleIoc.Default.Register<ICrud , CrudEF >();//I'd like to add the condition here
我想添加一个条件,指定
inside CrudVMDAO, the implementation of ICrud is CrudDAO, and inside CrudVMEF, the implementation of ICrud is CrudEF
是否可以使用
SimpleIoc
做到这一点? 最佳答案
如果要注册多个实现,则可以添加一个 key 以在注册过程中区分它们,如下所示。
SimpleIoc.Default.Register<ICrud>(() => new CrudDAO(), "CrudDAO");
SimpleIoc.Default.Register<ICrud>(() => new CrudEF(), "CrudEF");
在CrudVMDAO内部:
SimpleIoc.Default.GetInstance<ICrud>("CrudDAO");
内部CrudVMEF:
SimpleIoc.Default.GetInstance<ICrud>("CrudEF");
关于c# - WPF MVVM light应用程序内的SimpleIoc问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28495682/