2017-12-19 13 views
-1

私の消費者コードを以下に示します。イベントが発行されたときに 'このオブジェクトに対して定義されたパラメータのないコンストラクタはありません。'例外がスローされます(詳細は下記参照)。 Microsoft.Extensions.DependencyInjectionコンテナのみを使用しています。どうすれば依存関係を注入できますか?このためのコードサンプルがあります。Masstransitで消費者に依存関係を注入する方法

public class UserAddedConsumer : IConsumer<IUserCreated> 
{ 
    IUserNotification notificationManager; 
    ILogger<UserAddedConsumer> logger; 
    public UserAddedConsumer(IUserNotification notificationManager, ILogger<UserAddedConsumer> logger) 
    { 
     this.notificationManager = notificationManager; 
     this.logger = logger; 
    } 

    public Task Consume(ConsumeContext<IUserCreated> context) 
    { 
     logger.LogTrace("UserAddedConsumer - Userid: " + context.Message.Id); 
     return notificationManager.UserCreated(context.Message.User); 
    } 
} 
No parameterless constructor defined for this object., System.MissingMethodException: No parameterless constructor defined for this object. 
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor) 
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
    at System.Activator.CreateInstance(Type type) 
    at MassTransit.ConsumeConfigurators.UntypedConsumerConfigurator1<>c__DisplayClass2_0.<.ctor>b__0() 
    at MassTransit.Pipeline.ConsumerFactories.DelegateConsumerFactory1.<Send>d__21.MoveNext() 
    --- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.<GreenPipes-IFilter<MassTransit-ConsumeContext<TMessage>>-Send>d__4.MoveNext() 
+1

少なくとも、エンドポイントの設定コードを表示します。 –

答えて

0

これは、実装の問題でした。私は消費者を登録するために以下を使って解決しました。

conf.Consumer(consumer, serviceProvider.GetService); 
serviceProvider is IServiceProvider 

instead of 
conf.Consumer(consumer, Activator.CreateInstance); 
+0

完全なエンドポイント構成を表示できますか? –

関連する問題