使用 NServiceBus 3 对象生成器解决 Unity 2 容器的问题 [英] Issue resolving Unity 2 container using NServiceBus 3 object builder

查看:85
本文介绍了使用 NServiceBus 3 对象生成器解决 Unity 2 容器的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在为 Unity 2 使用 NServiceBus 3.0.0 beta 2 预发布对象生成器时收到以下错误.据我所知,AutowireEnabledInjectionProperty 中的 CommonObjectBuilder 似乎有问题建设者.

I'm receiving the following error while using the NServiceBus 3.0.0 beta 2 pre-release object builder for Unity 2. As far as I have been able to trace, it appears to be a problem with the CommonObjectBuilder in the AutowireEnabledInjectionProperty builder.

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

推荐答案

我愿意接受 Udi 的回答是因为,好吧,他就是那个人.然而,尽管我尝试注册了我们需要的所有类型,但我始终无法让 Unity 2 构建器正常工作.

I would like to have accepted Udi's answer because, well, he's the man. However, I was never able to get the Unity 2 builder to work despite attempting to register every type that we needed.

一周左右后,我最终回到使用 DefaultBuilder,将我们预构建的 Unity 容器传递到 ServiceLocator,并将 IServiceLocator 作为单例注册到 NSB 的默认构建器.效果很好.

After a week or so, I ended up going back to using the DefaultBuilder, passing in our prebuilt Unity container into a ServiceLocator, and registering the IServiceLocator as a singleton to NSB's default builder. It worked out quite well.

这篇关于使用 NServiceBus 3 对象生成器解决 Unity 2 容器的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆