c# - 如何在MVVM Light的SimpleIoc中注册一个实现多个接口(interface)的类?

标签 c# dependency-injection mvvm-light ioc-container

假设我有几个接口(interface)和一个实现它们的类:

public interface ISomething1 { /* blablabla */ }
public interface ISomething2 { /* blablabla */ }
public class Service : ISomething1, ISomething2 { /* blablabla x 2 */ }

我想用这两个接口(interface)在 SimpleIoc 中注册类:

SimpleIoc.Default.Register<ISomething1, Service >();
SimpleIoc.Default.Register<ISomething2, Service >();

但是这里的第二行抛出一个 ArgumentException 消息:

An item with the same key has already been added.

我原以为这里的关键是界面本身,但显然并非如此。我的想法是使用显式 key ,但我想通过依赖注入(inject)获取实例,其中 IoC 只能与无 key 注册表一起使用。

那么我如何在不更改接口(interface)或实现本身的情况下在这里使用 SimpleIoc?

最佳答案

可能这是一个更好的解决方案,因为 Service() 构造函数可以在 ioc 容器中注册依赖项。

SimpleIoc.Default.Register<Service>();
SimpleIoc.Default.Register<ISomething1>(() => SimpleIoc.Default.GetInstance<Service>());
SimpleIoc.Default.Register<ISomething2>(() => SimpleIoc.Default.GetInstance<Service>());

关于c# - 如何在MVVM Light的SimpleIoc中注册一个实现多个接口(interface)的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29418069/

相关文章:

python-3.x - 如何正确地将依赖项注入(inject) Flask?

dependency-injection - DI 容器 : Howto pass configuration to objects

silverlight - Silverlight- View 模型之间的通信

mvvm-light - 如何强制 Cleanup() 为我所有的 ViewModels

c# - 线程池极端性能滞后

c# - 动态添加具有指向动态生成的自签名证书的 HTTPS 绑定(bind)的网站

c# - .NET 中的 PDF 到 docx。使用两种不同的工具来创建 PDF 和 Docx,还是购买一款同时具备这两种功能的工具?

从十进制开始的小时和分钟的 C# 字符串格式

c# - 使用参数在 MVVM Light 中打开新窗口的最佳实践

c# - 使用 autofac 3.1.1 进行属性注入(inject)