首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Catel/Ninject:解析Ninject.ActivationException时的IUIVisualizerService

Catel/Ninject:解析Ninject.ActivationException时的IUIVisualizerService
EN

Stack Overflow用户
提问于 2014-03-06 10:13:56
回答 1查看 281关注 0票数 0

当我试图解析IUIVisualizerService时,Ninject.ActivationException出现在Ninject.dll中。

有人能帮我吗?

这个代码部分调用了这个问题:

代码语言:javascript
复制
NinjectDependencyResolver resolver = new NinjectDependencyResolver();
            var item = resolver.GetService<IUIVisualizerService>();

Resolver代码:

代码语言:javascript
复制
using System;
    using System.Collections.Generic;
    using Catel.Services;
    using Ninject;
    using NLog;

    namespace MS_Modell.Infrastructure
    {
        internal class NinjectDependencyResolver
        {
            private IKernel kernel;
            private Logger log = LogManager.GetCurrentClassLogger();

            public NinjectDependencyResolver()
            {
                try
                {
                    kernel = new StandardKernel();
                    kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>();
                }
                catch (Exception ex)
                {
                    log.Fatal("NinjectDependencyResolver(): " + ex);
                    throw;
                }
            }

            public T GetService<T>()
            {
                try
                {
                    return kernel.TryGet<T>();
                }
                catch (Exception ex)
                {
                    log.Fatal("GetService<T>(): " + ex.Message);
                    throw;
                }
            }       
        }
    }

编辑:在调用GetService之后,我得到了一个空对象。但这个例外没有被提出来。只有在Visual的控制台输出上可以看到一条消息:

"Ninject.ActivationException“类型的删除(第一次机会)在Ninject.dll中抛出。

编辑2:

为了快速的答案。以下是一个遇到同样问题的人的具体解决方案:

在NinjectResolver中,您需要添加以下代码:

代码语言:javascript
复制
    kernel.Bind<IViewLocator>().To<ViewLocator>();
    kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>().WithConstructorArgument("ViewLocator", GetService<IViewLocator>());

解析IUIVisualizerService:

代码语言:javascript
复制
TargetSelectorViewModel selector = new TargetSelectorViewModel();
                var item = resolver.GetService<IUIVisualizerService>();
                item.Register(typeof(TargetSelectorViewModel), typeof(TargetSelector));
                item.ShowDialog(selector);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-06 11:53:14

UIVisualizerService需要IViewLocator的依赖注入。确保尼尼特也能解决这个问题。

https://github.com/Catel/Catel/blob/develop/src/Catel.MVVM/Catel.MVVM.NET40/Services/UIVisualizerService.cs#L54

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22221314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档