Ошибка активации Ninject: нет соответствующих привязок, и тип не является самосвязываемым - PullRequest
0 голосов
/ 22 марта 2019

Привет! Я пытаюсь завершить лифт и смену устаревшей службы WCF, и я столкнулся с ошибкой.

В основном я получаю следующее сообщение:

Ошибка активацииSearcher {Product} Нет соответствующих привязок, и тип не является самосвязываемым.Путь активации:
3) Внедрение Searcher зависимости {Product} в параметр productSearcher конструктора типа ProductSearchService
2) Инъекция зависимости ProductSearchService в экземпляр параметра конструктора типа NinjectIISHostingServiceHost {ProductSearchService}
1) Запрос на получениеNinjectIISHostingServiceHost {ProductSearchService}

Предложения:

  1. Убедитесь, что вы определили привязку для Searcher {Product}.
  2. Если привязка была определена вмодуль, убедитесь, что модуль был загружен в ядро.
  3. Убедитесь, что вы случайно не создали более одного ядра.
  4. Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствуетимя параметра конструкторов.
  5. Если вы используете автоматическую загрузку модуля, убедитесь, что путь поиска и фильтры правильные.

Вот модуль привязки Ninject:

public override void Load()
{
   Bind<Searcher<Product>>().To<ProductWebHelpSearcher>().WhenInjectedInto<ProductSearchService>().InSingletonScope();
   Bind<Searcher<Product>>().To<ProductSearcher>().InRequestScope();
}

и копия NinjectWebCommon.cs

public static class NinjectWebCommon
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Load<NinjectBindingsMappingModule>();
    }
}

и, наконец, копия службы WCF:

public class ProductSearchService : IProductSearchService
{
    private readonly Searcher<Product> _productSearcher;

    public ProductSearchService(Searcher<Product> productSearcher)
    {
        _productSearcher = productSearcher;
    }
}

Есть несколько проектов с похожей настройкой, и у меня не возникает та же проблема, что и у меня,единственное отличие состоит в том, что эти приложения являются MVC, а не WCF.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 25 марта 2019

После проверки пространств имен, как предложил Александр, кажется, что svc .cs использовал одно пространство имен, а модуль отображения Ninject получил другое.Теперь я сделал их одинаковыми, и все в рабочем состоянии.

...