我想使用约定配置我的 ninject 容器并同时创建所有选定服务的实例。我目前的解决方案是:
var singletons = new List<Type>();
kernel.Bind(x =>
x.FromThisAssembly() // Scans currently assembly
.SelectAllClasses()
.WithAttribute<SingletonAttribute>()
.Where(type =>
{
var include = MySpecialFilterOfSomeSort(type);
if (include)
{
singletons.Add(type);
}
return include;
}) // Skip any non-conventional bindings
.BindDefaultInterfaces() // Binds the default interface to them
.Configure(c => c.InSingletonScope()) // Object lifetime is current request only
);
singletons.ForEach(s => kernel.Get(s));
更多
我有一个进程内服务总线。一些组件用 [Singleton] 装饰,并将自己注册到服务总线:
// the constructor
public FooEventsListenerComponent(IServiceBus serviceBus) {
serviceBus.Subscribe<FooEvent>(e => HandleFooEvent(e));
}
我需要在应用程序中创建所有服务总线观察者的实例。在类型映射旁边进行操作很方便(但合适吗?),因为 1. 类型已经枚举,2. 我可以访问 DI 容器。