在c#中重构这个静态类的最佳方法是什么?
发布时间:2020-12-15 17:15:10 所属栏目:百科 来源:网络整理
导读:请参阅下面的示例静态类. public static class BackgroundTaskExecuter{ public static void MethodA() { using (var service = IocManager.Instance.ResolveAsDisposableIServiceA()) { service.Object.MethodA(); } } public static void MethodB() { usin
请参阅下面的示例静态类.
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(); } } } 如您所见,我有三种方法. MethodA,MethodB和MethodC,它们对应于三个不同的接口IServiceA,IServiceB和IServiceC 我这样做的原因是因为我使用的是带有aspnetboilerplate框架的Hangfire.io,而在Hangfire中,后台任务没有来自正常依赖注入的HttpContext.创建一个包含我手动解析的调用的静态类似乎可以解决这个问题. 用法如下: BackgroundJob.Enqueue(() => BackgroundTaskExecuter.MethodA()); 现在,我的网络应用程序中只有一两个后台任务,但可以想象我将来可能会有更多的任务,虽然现在可以维护,但如果我采用这种方法,它最终会变得难看. 有没有更好的方法来做/重构这个?工厂模式或类似的东西也许? 谢谢. 解决方法
我会使静态包装器通用而简单.让它公开一个解析服务并通过using语句使用它的方法,允许调用者调用传递给Action< T>的实例.
资源 public static class BackgroundTaskExecuter { public static void ResolveAndConsume<T>(Action<T> consumeService) { // Consider applying constraint to the <T> to // match the constraint of ResolveAsDisposable<T> using (var service = IocManager.Instance.ResolveAsDisposable<T>()) { consumeService(service); } } } 示例用法 BackgroundJob.Enqueue(() => BackgroundTaskExecuter.ResolveAndConsume<IServiceA>(serviceA => serviceA.MethodA())); 通过上述内容,您可以解析并使用服务的实现并根据需要调用其功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |