WPF MVVM light 应用程序中的 SimpleIoc 问题
SimpleIoc issue within WPF MVVM light application
我有一个使用 MVVM Light
的 wpf 应用程序。我有两个 class 和接口 :
public interface ICrud{
//
}
public class CrudDAO : ICrud{
//
}
public class CrudEF : ICrud{
//
}
我有两个视图模型:
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 来注入依赖项。所以我在 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
来做到这一点?
如果你想注册多个实现,你可以在注册时添加一个键来区分它们,如下所示。
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");
我有一个使用 MVVM Light
的 wpf 应用程序。我有两个 class 和接口 :
public interface ICrud{
//
}
public class CrudDAO : ICrud{
//
}
public class CrudEF : ICrud{
//
}
我有两个视图模型:
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 来注入依赖项。所以我在 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
来做到这一点?
如果你想注册多个实现,你可以在注册时添加一个键来区分它们,如下所示。
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");