簡體   English   中英

Catel / Ninject:解決IUIVisualizerService時出現Ninject.ActivationException

[英]Catel/Ninject: Ninject.ActivationException when resolving IUIVisualizerService

當我嘗試解析IUIVisualizerService時,Ninject.dll中出現Ninject.ActivationException。

有人可以幫我嗎?

此代碼段稱為問題:

NinjectDependencyResolver resolver = new NinjectDependencyResolver();
            var item = resolver.GetService<IUIVisualizerService>();

解析器代碼:

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 Studio的控制台輸出上看到一條消息:

Ninject.dll中引發了“ Ninject.ActivationException”類型的期望(第一次機會)。

編輯2:

謝謝你們的快速解答。 這是遇到相同問題的人的具體解決方案:

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

    kernel.Bind<IViewLocator>().To<ViewLocator>();
    kernel.Bind<IUIVisualizerService>().To<UIVisualizerService>().WithConstructorArgument("ViewLocator", GetService<IViewLocator>());

解決IUIVisualizerService:

TargetSelectorViewModel selector = new TargetSelectorViewModel();
                var item = resolver.GetService<IUIVisualizerService>();
                item.Register(typeof(TargetSelectorViewModel), typeof(TargetSelector));
                item.ShowDialog(selector);

UIVisualizerService需要IViewLocator的依賴項注入。 確保Ninject也可以解決該問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM