Unity,接口无法构建

时间:2015-10-15 12:10:20

标签: c# .net unity-container

使用Unity时,我在尝试解析类型时收到此错误消息:

  

当前类型Onboard.UI.Services.IMessagingService是一个无法构造的接口

下面是我App.xaml.cs文件中发现的导致此错误的代码。

UnityContainer
    .RegisterType<IMessagingService, SessionMessagingService>("SessionMessageService")

var sessionStateNotifactionService =
    UnityContainer
        .Resolve <SessionStateNotificationService>("SessionMessageService");

我正在尝试.RegisterType<>两种共享相同接口IMessageService的类型。如果我删除了trying to register a named type的尝试,例如("SessionMessageService")参数,一切运作良好;但是,我不再能够区分我希望使用的接口的哪个实现。

.Resolve的调用会引发错误,因为SessionStateNotificationService的构造函数看起来像

// ... class

private IMessagingService _messagingService;

public SessionStateNotificationService(IMessagingService messagingService)
{
    // ...

这里的尝试是关于我可以向SessionStateNotificationService提供哪些实现更通用。

StackOverflow上有很多关于此错误的问题,即:

Exception is: InvalidOperationException - The current type, is an interface and cannot be constructed. Are you missing a type mapping?

然而,这个问题产生于OP做了一些奇怪的事情,并且接受的答案不适用于上述情况(真正尝试遵循Unity文档)。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

假设多次注册:

UnityContainer
    .RegisterType<IMessagingService, SessionMessagingService>("SessionMessageService")

UnityContainer
    .RegisterType<IMessagingService, BrowseMessagingService>("BrowseMessagingService")

确保已注册SessionStateNotificationService并且指定的依赖项存在:

UnityContainer.
     RegisterType<SessionStateNotificationService>(
        new InjectionConstructor(new ResolvedParameter<IMessagingService>("SessionMessageService")));

现在解决:

UnityContainer.Resolve<SessionStateNotificationService>(); // uses the SessionMessageService