규칙을 사용하여 ninject 컨테이너를 구성하고 동시에 선택한 모든 서비스의 인스턴스를 만들고 싶습니다. 나의 현재 솔루션입니다 :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));
더
내가 내 프로세스 서비스 버스가 있습니다. 일부 구성 요소는 [싱글]로 장식하고 서비스 버스로 자신을 등록합니다
// the constructor
public FooEventsListenerComponent(IServiceBus serviceBus) {
serviceBus.Subscribe<FooEvent>(e => HandleFooEvent(e));
}
나는 모든 서비스 버스 관찰자의 인스턴스를 생성하는 응용 프로그램에 장소가 필요합니다. 유형 매핑이 다음과 같이 편리합니다 (그러나 적절합니까?) 1. 유형이 이미 열거되어 있기 때문에 2. DI 컨테이너에 액세스 할 수 있습니다.
가 왜 그것들을 초기화해야하나요 : 모든 바인딩 그냥 할로 커널 후
가 초기화됩니다? 어쨌든 [Composition Root] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/)의 일부로 인스턴스화해서는 안됩니까? 그렇지 않은 경우 응용 프로그램이 닫힐 때 "종료"하라는 메시지와 같이 일반적인 논리를 공유합니까? 또는 인스턴스화 후 "초기화"하시겠습니까? ... – BatteryBackupUnit@BatteryBackupUnit, 공정한 질문. 질문을 업데이트했습니다. –