Siehe dieses Beispiel statische Klasse unten.Der beste Weg, um diese statische Klasse in C# umzuformen?
public static class BackgroundTaskExecuter
{
public static void MethodA()
{
using (var service = IocManager.Instance.ResolveAsDisposable<IServiceA>())
{
service.Object.MethodA();
}
}
public static void MethodB()
{
using (var service = IocManager.Instance.ResolveAsDisposable<IServiceB>())
{
service.Object.MethodB();
}
}
public static void MethodC()
{
using (var service = IocManager.Instance.ResolveAsDisposable<IServiceC>())
{
service.Object.MethodC();
}
}
}
Wie Sie sehen können, habe ich drei Methoden. MethodA
, MethodB
und MethodC
, die mit drei verschiedenen Schnittstellen entsprechen IServiceA
, IServiceB
und IServiceC
Der Grund, warum ich dies tue, ist, weil ich Hangfire.io mit aspnetboilerplate Rahmen und in Hangfire verwenden, hat eine Hintergrundaufgabe Httpcontext nicht von der normalen Dependency Injection. Das Erstellen einer statischen Klasse, die meine Anrufe manuell umschließt, wenn ich sie manuell auflöse, scheint dies zu umgehen.
Verwendung sieht wie folgt aus:
BackgroundJob.Enqueue(() => BackgroundTaskExecuter.MethodA());
Vorerst habe ich nur ein oder zwei Hintergrundaufgaben in meiner Web-app, aber möglicherweise kann ich viel mehr in der Zukunft haben und während es jetzt wartbar, es wird schließlich hässlich, wenn ich diesen Ansatz halte.
Gibt es eine bessere Möglichkeit, dies zu tun/zu refaktorieren? Ein Fabrikmuster oder ähnliches?
Danke.
@RuneFS Beispiel/hypothetische/MCVE-Code ist nicht-Thema auf [codereview.se]. Siehe [Leitfaden zur Code-Überprüfung für SO-Benutzer] (http://meta.codereview.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack-overflow-users). –
Ich würde argumentieren, dass diese Frage tatsächlich dem in der Hilfe definierten Bereich entspricht. –