1

IMessageBusFluentScheduler のジョブ内で注入されたオブジェクト ( ) を使用しようとしています。

私の autofac セットアップは次のようになります。

var thisAssembly = Assembly.GetExecutingAssembly();
var umbracoAssembly = typeof(UmbracoApplication).Assembly;
var builder = new ContainerBuilder();

// Controllers
builder.RegisterControllers(thisAssembly);
builder.RegisterApiControllers(thisAssembly);

// Umbraco related stuff (http://issues.umbraco.org/issue/U4-4181)
builder.RegisterControllers(umbracoAssembly);
builder.RegisterApiControllers(umbracoAssembly);

builder.RegisterType<MessageBus>().As<IMessageBus>();

Container = builder.Build();

そして、私は次のようなスケジュールされたジョブを持っています:

public class CourseAgentJob : IJob
{
    private IMessageBus _bus;

    public CourseAgentJob(IMessageBus bus)
    {
        _bus = bus;
    }

    public async void Execute()
    {
        ErrorLog.GetDefault(HttpContext.Current).Log(new Error(new Exception("Fire course agent")));
    }
}

ジョブが起動/セットアップされると、次のエラーが発生します。

System.AggregateException: 1 つ以上のエラーが発生しました。---> System.MissingMethodException: このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。System.RuntimeTypeHandle.CreateInstance (RuntimeType タイプ、ブール型 publicOnly、ブール型 noCheck、ブール型 & canBeCached、RuntimeMethodHandleInternal & ctor、ブール型 & bNeedSecurityCheck) で System.RuntimeType.CreateInstanceSlow (ブール型 publicOnly、ブール型 skipCheckThis、ブール型 fillCache、StackCrawlMark & stackMark) で System.Activator.CreateInstanceT FluentScheduler.JobFactory.FluentScheduler.IJobFactory.GetJobInstanceT in A:\GitHub\FluentScheduler\Library\JobFactory.cs:line 25 at FluentScheduler.JobManager.<>c__12 1.<GetJobAction>b__12_0() in A:\GitHub\FluentScheduler\Library\JobManager.cs:line 66 at System.Threading.Tasks.Task.Execute() --- End of inner exception stack trace --- at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at FluentScheduler.JobManager.<>c__DisplayClass43_0.<RunJob>b__0() in A:\GitHub\FluentScheduler\Library\JobManager.cs:line 447 at System.Threading.Tasks.Task.Execute() ---> (Inner Exception #0) System.MissingMethodException: No parameterless constructor defined for this object. at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at System.Activator.CreateInstance[T]() at FluentScheduler.JobFactory.FluentScheduler.IJobFactory.GetJobInstance[T]() in A:\GitHub\FluentScheduler\Library\JobFactory.cs:line 25 at FluentScheduler.JobManager.<>c__121.b__12_0() in A:\GitHub\FluentScheduler\Library\JobManager .cs: System.Threading.Tasks.Task.Execute()< の 66 行目

正しく登録されていないように見えるのはどれですか? これまで DI/IoC をあまりやったことがないので、少し迷っています。

4

2 に答える 2