【发布时间】:2017-01-09 20:18:27
【问题描述】:
我似乎找不到任何有关此的信息,希望有人能提供帮助。
使用继承 ITestClass 的类“TestClass”,我可以使用以下代码注册 Autofac 单例:
builder.RegisterType<TestClass>().As<ITestClass>().SingleInstance();
向 Hangfire 添加工作同样简单:
RecurringJob.AddOrUpdate<ITestClass>(x => x.MethodInITestClass, Cron.MinuteInterval(1));
我似乎想不通的是如何将多个类注册为 Autofac 单例都具有相同的接口并能够为特定的单例创建 Hangfire 作业。
例如,有一个名为 ITest 的接口和使用此接口的类 TestClass1、TestClass2 和 TestClass3,我想为 TestClass2 添加一个 Hangfire 作业。
我认为命名单例可能是一个可以轻松创建的解决方案:
builder.RegisterType<TestClass1>().Named<ITest>("TestClass1").SingleInstance();
builder.RegisterType<TestClass2>().Named<ITest>("TestClass2").SingleInstance();
builder.RegisterType<TestClass3>().Named<ITest>("TestClass3").SingleInstance();
但是,为 TestClass2 添加一个 Hangfire 作业似乎是不可能的,因为 Hangfire 只接受一个接口作为参数,并且该接口现在有 3 个相关的单例。
我还希望能够将实现此接口的所有单例解析为 IEnumerable,这对于命名单例来说似乎也是不可能的。
对此有何建议?我猜命名单例可能是死路一条?
【问题讨论】:
标签: asp.net model-view-controller singleton autofac hangfire