统一,接口不能被构建
本文关键字:构建 不能 接口 统一 | 更新日期: 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