Решение проблемы контейнера Unity 2 с помощью NServiceBus 3 построителя объектов - PullRequest
1 голос
/ 28 декабря 2011

Я получаю следующую ошибку при использовании предварительного сборщика объектов NServiceBus 3.0.0 beta 2 для Unity 2. Насколько мне удалось отследить, кажется, это проблема с CommonObjectBuilder в AutowireEnabledInjectionPropertybuilder.

Конфигурация для NSB выглядит следующим образом:

public class NServiceBusContainerExtension : UnityContainerExtension
{
    protected override void Initialize()
    {
        var busConfig = NServiceBus.Configure.WithWeb()
            .Log4Net()
            .UnityBuilder(Container)
            .MsmqTransport()
                .IsTransactional(true)
                .PurgeOnStartup(false)
            .XmlSerializer()
            .UnicastBus();

        var bus = busConfig
                    .CreateBus()
                    .Start();

        Container.RegisterType<IPublisher, NServiceBusPublisher>(new InjectionConstructor(bus));
    }
}

Ошибка:

[ArgumentNullException: Value cannot be null.
Parameter name: typeToCreate]
   Microsoft.Practices.Unity.Utility.Guard.ArgumentNotNull(Object argumentValue, String argumentName) +55
   NServiceBus.ObjectBuilder.Unity.AutowireEnabledInjectionProperty.AddPolicies(Type typeToCreate, Type implementationType, String name, IPolicyList policies) +87
   Microsoft.Practices.Unity.UnityContainer.RegisterType(Type from, Type to, String name, LifetimeManager lifetimeManager, InjectionMember[] injectionMembers) +405
   Microsoft.Practices.Unity.InjectedMembers.ConfigureInjectionFor(Type serviceType, Type implementationType, String name, InjectionMember[] injectionMembers) +66
   Microsoft.Practices.Unity.InjectedMembers.ConfigureInjectionFor(Type typeToInject, InjectionMember[] injectionMembers) +22
   NServiceBus.ObjectBuilder.Unity.ConfigureComponentAdapter.ConfigureProperty(String name, Object value) +325
   NServiceBus.ObjectBuilder.Unity.UnityObjectBuilder.ConfigureProperty(Type concreteComponent, String property, Object value) +338
   NServiceBus.ObjectBuilder.Common.ComponentConfig.NServiceBus.ObjectBuilder.IComponentConfig.ConfigureProperty(String name, Object value) +120
   NServiceBus.ObjectBuilder.Common.ComponentConfig`1.NServiceBus.ObjectBuilder.IComponentConfig<T>.ConfigureProperty(Expression`1 property, Object value) +266
   NServiceBus.ObjectBuilder.Common.Config.ConfigureCommon.With(Configure config, IContainer container) +633
   NServiceBus.ConfigureUnityBuilder.UnityBuilder(Configure config, IUnityContainer container) +112

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вам необходимо зарегистрировать все новые типы в контейнере перед вызовом .CreateBus ().

0 голосов
/ 02 марта 2012

Я бы хотел принять ответ Уди , потому что, ну, он мужчина.Тем не менее, я так и не смог заставить работать сборщик Unity 2, несмотря на попытки зарегистрировать каждый необходимый нам тип.

Примерно через неделю я вернулся к использованию DefaultBuilder, передал наш предварительно собранный контейнер Unity в ServiceLocator и зарегистрировал IServiceLocator как синглтон для компоновщика NSB по умолчанию.Это сработало довольно хорошо.

...