Вопрос

При попытке настроить Servicestack.net для использования Ninject в качестве IOC, я получаю ошибки, относящиеся к различным привязанным, не определенным.В первую очередь для клиента ICACH.

Какие конкретные привязки должны быть созданы для правильной использования Ninject?

В настоящее время указано:

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

<Сильная> Примечание

Я создал IcontainerAdapter согласно Document Per Dovicestack для реализации использования Ninject. (Найдено здесь: Сервисные документы МОК )

<Сильная> Примечание 2 Мой метод Configure Apphost выглядит так:

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

<Сильная> Примечание 3

Я зарегистрировал iCaCheClient следующим образом: Связывать (). К ();

И я теперь получаю ошибку, указываю на 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>();
    }
}
.

Это было полезно?

Решение

Have you injected your Container adapter with:

container.Adapter = new NinjectIocAdapter(kernel);

If so, try also make your AppHost class internal if you haven't done so. There should only be 1 instance of AppHost and some IOC's like to create their own instance, wiping out all the configuration from the first one.

The behavior you're getting sounds like Ninject is complaining about unresolved dependencies. Make sure you get Ninject to return null with Unresolved dependencies by using kernal.TryGet<T> in your Container Adapter, e.g:

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

Другие советы

You need to write your own IContainerAdapter and then set Container.Adapter in your AppHost

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top