使用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上有很多关于此错误的问题,即:
然而,这个问题产生于OP做了一些奇怪的事情,并且接受的答案不适用于上述情况(真正尝试遵循Unity文档)。
我错过了什么?
答案 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