c# - WPF MVVM 轻应用程序中的 SimpleIoc 问题

标签 c# wpf mvvm dependency-injection mvvm-light

我有一个使用 MVVM Light 的 wpf 应用程序.我有两个类和接口(interface):

public interface ICrud{
//
}

public class CrudDAO : ICrud{
//
}

public class CrudEF : ICrud{
//
}

我有两个 View 模型:
  public class CrudDAOVM {
       public  ICrud icrud;
       public CrudDAOVM (ICrud _icrud)
       {
        icrud = _icrud;
       }
                         }

    public class CrudEFVM {
       public  ICrud icrud;
       public CrudEFVM (ICrud _icrud)
        {
        icrud = _icrud;
        }
                          }

我想使用 简单Ioc 注入(inject)依赖项。所以我在 中添加了这段代码查看模型定位器 :
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");

关于c# - WPF MVVM 轻应用程序中的 SimpleIoc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495682/

相关文章:

wpf - Gridsplitter 不调整大小

c# - 如何知道所选选项卡的名称? (MVVM)

c# - WPF MVVM数据绑定(bind)文本框依赖覆盖输入或不更新输入

c# - 如何在 WPF 中安排 Process.Start

c# - 关闭实际的窗口并从ViewModel中打开一个新窗口

c# - 你能写一个可以接受任意数量参数的 c# 装饰器函数吗?

C# 项目在很短的时间内为空?

c# - 在 asp.net 中对 gridview 列进行排序

c# - 根据另一个数组中指定的索引从数组中选择元素c#

c# - 如何以增量方式调整 WPF 窗口的大小?