2011-12-28 21 views
1

Unity 2のNServiceBus 3.0.0 beta 2プレリリースオブジェクトビルダを使用しているときに、次のエラーが発生します。 AutowireEnabledInjectionProperty BuilderのCommonObjectBuilderに問題があります。次のようにNSB用NServiceBus 3オブジェクトビルダーを使用してUnity 2コンテナを解決する際の問題

の設定は次のとおりです。

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 

答えて

0

私はUdi'sという回答を受け入れたかったのですが、彼は男ですから。しかし、必要なすべてのタイプを登録しようとしても、Unity 2ビルダーを動作させることはできませんでした。

1週間ほど経ってから、私はDefaultBuilderを使って、あらかじめ作成したUnityコンテナをServiceLocatorに渡し、NSBのデフォルトビルダーにシングルトンとしてIServiceLocatorを登録しました。それはかなりうまくいった。

1

あなたは.CreateBusを呼び出す前に、コンテナ内のすべての新しいタイプを登録する必要があります()。

+0

Udi、これはメッセージタイプを参照していますか? – BlackICE

+0

いいえ、これはすべてのハンドラタイプだけでなく、ハンドラに注入したいものもあります。 –

関連する問題