2012-02-28 2 views
1

Я испытываю this error, упомянутый в группе nsb при запуске в профиле NServiceBus.Production.NServiceBus.ObjectBuilder.Ninject критическая ошибка

Просто интересно, если это известная проблема (Remo? :-)), потому что в настоящее время она предотвратит использование ninject с nsb.

NServiceBus.Ninject-CI.3.0.2044 nuget.

Большое спасибо!

2012-02-28 15:24:18,204 [Worker.8] WARN NServiceBus.Unicast.Transport.Transacti 
onal.TransactionalTransport [(null)] <(null)> - Failed raising 'transport messag 
e received' event for message with ID=02e57b0c-f345-46ae-a095-f52a4cfc0cfb\2071 
System.NullReferenceException: Object reference not set to an instance of an obj 
ect. 
    at Ninject.Injection.DynamicMethodInjectorFactory.EmitMethodCall(ILGenerator 
il, MethodInfo method) in c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject 
\Injection\DynamicMethodInjectorFactory.cs:line 130 

ответ

2

Я не писал NSB ObjectBuilder для Ninject. Из исключения я могу сказать, что Ninject не может ввести свойство, потому что нет публичного сеттера. С неизменным Ninject это не может произойти, потому что эти свойства фильтруются до тех пор, пока Ninject не будет явно сказано, что он не должен фильтровать ни одного публичного элемента.

Я коротко посмотрел на NinjectObjectBuilder. Он добавляет новую эвристику, и кажется, что она не фильтрует публичные объекты с частными сеттерами. Эта реализация требует некоторых изменений.

Но я думаю, что это не решит вашу проблему, поскольку вы хотите, чтобы это свойство было введено в любом случае. Правильный способ сделать это - изменить сеттер для публики. Кроме того, вы можете изменить настройки, чтобы разрешить приватную инъекцию члена. Settings.InjectNonPublic = true; Но я не рекомендую это делать.

+0

Спасибо Remo, и спасибо снова за всю вашу текущую работу над ninject! Я надеялся, что вы узнаете что-то об адаптере NSB, и этот ответ помогает. Пит. –