簡體   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