Ninject Activation Error:没有匹配的绑定可用,并且该类型不可自绑定

问题描述 投票:0回答:1

嗨我正在尝试完成升级和转移老化的WCF服务,我遇到了一个错误。

基本上我得到以下消息:

激活Searcher时出错{产品}没有匹配的绑定可用,并且该类型不可自我绑定。激活路径: 3)将依赖关系Searcher {Product}注入到ProductSearchService类型的构造函数的参数productSearcher中 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。

任何帮助是极大的赞赏。

c# wcf ninject
1个回答
0
投票

在按照Alexander的建议检查命名空间后,似乎svc .cs使用了一个名称空间,而Ninject映射模块被赋予另一个名称空间。我现在已经使它们变得相同而且一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.