繁体   English   中英

如何配置Ninject以使用ServiceStack.net

[英]How to configure Ninject to work with ServiceStack.net

在尝试配置ServiceStack.net以使用Ninject作为其IOC时,我收到的错误是指未定义的各种绑定。 主要用于ICache客户端。

需要创建哪些特定绑定才能正确使用Ninject?

目前已指定:

Bind<ISessionFactory>().To<SessionFactory>();//Is this correct/needed?

注意

我根据ServiceStack文档创建了一个IContainerAdapter来实现Ninject的使用。 (在此处找到: ServiceStack IOC Docs

注意2我的apphost配置方法如下所示:

public override void Configure(Funq.Container container)
{
        IKernel kernel = new StandardKernel(new BindingModule());
        container.Adapter = new NinjectContainerAdapter(kernel);
}

注3

我已经注册了ICacheClient,如下所示:Bind()。To();

我现在收到指向IRequest的错误

Error activating IRequestLogger\nNo matching bindings are available, and the type is not self-bindable

容器适配器

public class NinjectContainerAdapter : IContainerAdapter
{
    private readonly IKernel _kernel;

    public NinjectContainerAdapter(IKernel kernel)
    {
        this._kernel = kernel;
    }

    public T TryResolve<T>()
    {
        return this._kernel.Get<T>();
    }

    public T Resolve<T>()
    {
        return this._kernel.Get<T>();
    }
}

你有没有注入你的容器适配器:

container.Adapter = new NinjectIocAdapter(kernel);

如果是这样,如果您还没有这样做,请尝试将您的AppHost类设为内部 应该只有1个AppHost实例,而一些IOC喜欢创建自己的实例,从第一个实例中删除所有配置。

你得到的行为听起来像Ninject抱怨未解决的依赖关系。 通过在容器适配器中使用kernal.TryGet<T> ,确保让Ninject返回null与未解析的依赖关系,例如:

public T TryResolve<T>()
{
    return this._kernel.TryGet<T>();
}

您需要编写自己的IContainerAdapter,然后在AppHost中设置Container.Adapter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM