统一,接口不能被构建

本文关键字:构建 不能 接口 统一 | 更新日期: 2023-09-27 18:17:46

使用Unity,当我试图解析一个类型时,我目前收到这个错误消息:

当前类型,Onboard.UI.Services。IMessagingService,是一个接口,不能被构造

下面,是在我的App.xaml.cs文件中发现的抛出这个错误的代码。

UnityContainer
    .RegisterType<IMessagingService, SessionMessagingService>("SessionMessageService")
var sessionStateNotifactionService =
    UnityContainer
        .Resolve <SessionStateNotificationService>("SessionMessageService");

我正在尝试.RegisterType<>上共享相同接口IMessageService的两种类型。如果我删除尝试注册命名类型的尝试,例如("SessionMessageService")参数,一切都工作得很好;但是,我不再有办法区分我希望使用的接口的哪个实现。

在调用.Resolve时抛出错误,因为SessionStateNotificationService的构造函数看起来像

// ... class
private IMessagingService _messagingService;
public SessionStateNotificationService(IMessagingService messagingService)
{
    // ...

这里的尝试是更通用的关于什么实现我可以提供给SessionStateNotificationService

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

Exception is: InvalidOperationException -当前类型,是一个接口,不能被构造。您是否错过了类型映射?

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

我错过了什么?

统一,接口不能被构建

假设多重注册:

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