我有一个使用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/

10-11 17:24