2016-03-31 12 views
2

bir yönteme dinamik yazılan Eylem geçmesine nasıl Ben 3d parti işi yürütme kütüphanesini <code>Action<T></code> kabul (hangfire) sahip

Add((MyJob job) => job.Run()); 
:

Add(Action<T> action); 

rahatlıkla böyle bir şey çağırabilirsiniz

Ancak işi dinamik olarak yansıtma yoluyla yüklemek istiyorum, bu yüzden kullanabileceğim bir sınıf adı "MyNamespace.MyJob" var. Yansıma ile gerekli parametreyi nasıl oluşturabileceğimi anlayamıyorum.

P.S. Sınıf IJob'u uyguluyor, ancak ne yazık ki Action<IJob> kullanamıyorum çünkü hangfire daha sonra DI kapsayıcısından çözmek için bu argümanı kullanacak.

+0

Hangfire bu parametreyi nasıl sağlıyor? – usr

+0

Bunu kastettiğinizden emin değil misiniz: RecurringJob.AddOrUpdate (Eylem eylem) –

cevap

3

Hangfire, DI kapsayıcısının bir değer sağlamasını istemek için type argümanını kullanır gibi görünüyor. Bu nedenle delegenin gerçekte doğru tipte olması gerekir. Action<object> kullanmak işe yaramaz.

static void AddToHangfire<T>() where T : ICommand { 
Add((T job) => job.Run()); 
} 

Şimdi bu yöntemi çağırmak için yansımayı kullanmanız gerekir. Bunu yapmak için MethodInfo.MakeGenericMethod ve MethodInfo.Invoke'u kullanabilirsiniz.

+0

Çok teşekkürler, bu hemen işe yaradı. Typeof(). GetMethod(). MakeGenericMethod(). Invoke() kullanılır. Çok zor olan bir Action yaratmaya çalışıyordum, ancak Action içerisindeki bu yöntemle bu geçici çözüm çok parlak :) –

+0

Evet, ortak bir yansıma numarası. Sadece kötü şeyleri bir kez yapmak zorundasın. – usr

+0

Parçayı kullanım yanıtına ekleyebilir misiniz? –

İlgili konular