ServiceStack/Funq не может разрешить исключение System.Boolean

Я настроил API-интерфейс ServiceStack, используя встроенный контейнер Funq IoC для разрешения моих репозиториев. Однако, когда я вызываю метод API, я получаю следующее исключение:

Не удалось разрешить требуемую зависимость типа System.Boolean.

В прошлый раз, когда я проверял, System.Boolean не требовал разрешения. Я зарегистрировал свои репозитории в AppHost Configure следующим образом:

container.RegisterAutoWiredAs<OrganisationRepository, IOrganisationRepository>().ReusedWithin(ReuseScope.Request);

Я впервые использую ServiceStack или Funq. Я делаю что-то не так? Есть ли способ обойти это?


person Carvellis    schedule 31.12.2012    source источник
comment
Вы не можете автоматически разрешить что-то, что принимает логический параметр. Как он узнает, передать ли true или false?   -  person SLaks    schedule 31.12.2012
comment
Ни один из моих конструкторов не получает логическое значение. Точно такая же настройка работает с Autofac.   -  person Carvellis    schedule 31.12.2012
comment
@SLaks ах, на самом деле была одна зависимость с перегруженным конструктором, который принимает логическое значение. Та же самая зависимость всегда работала с Autofac, потому что, вероятно, Autofac достаточно умен, чтобы найти конструктор (без логического параметра), который он действительно может разрешить.   -  person Carvellis    schedule 31.12.2012


Ответы (1)


Если вы используете container.RegisterAutoWiredAs<T,IT>(), Funq автоматически подключит репозиторий по соглашению, т. е. использует самый большой конструктор, а также разрешит и внедрит каждую зависимость общедоступного свойства вашего репозитория.

Чтобы использовать альтернативный конкретный конструктор или только определенные свойства autowire, вам нужно указать регистрацию вручную с помощью:

container.Register<IOrganisationRepository>(c => 
    new OrganisationRepository(c.Resolve<IFoo>()) { Bar = c.Resolve<IBar>() } ); 

Примечание: всякий раз, когда у вас возникают подобные проблемы с IOC, вы также должны включать скелет вашего класса.

person mythz    schedule 02.01.2013