2011-01-31 2 views
4

다시 한번 나는 여기서 명백한 것을 놓칠지도 모른다라고 생각한다. 나는 규칙에 의한 자동 바인딩을하려고하고있다. Ninject.extension.conventions 프로젝트와 어셈블리 스캐너를 살펴 보았습니다. 나는별로 몇 가지 시도했습니다Ninject convention based binding

Bind<ICommandHandler<MyCommand>>().To<MyCommandHandler>(); 
Bind<ICommandHandler<MyOtherCommand>>().To<MyOtherCommandHander>(); 

:

Kernal.Scan(x => { 
    x.FromAssemblyContaining<MyCommand>(); 
    x.WhereTypeInheritsFrom(typeof(ICommandHander<>)); 
    x.BindWith(new DefaultBindingGenerator()); 
}); 

을하지만 거기

내가 가지고있는 것은 내가하는 자동 바인딩 싶으면, 다음과 같이 많은 라인입니다

kernel.Get<ICommandHandler<T>>(); 
+0

당신이 해봤 kernel.Load (Assembly.GetExecutingAssembly()); 이걸 CreateKernel 오버라이드에 넣어야합니다. – WorldIsRound

+0

여기서 무슨 뜻인지 잘 모르겠습니다. 나는 지금 NinjectModule.Load() 메소드 안에 Kernel.Scan 코드를 가지고있다. – Mike

답변

4

시도가 GenericBindingGenerator보고 대신다음과 같은 경우에는 인스턴스가 반환.

+0

그게 티켓이야 !! 고맙습니다. 가끔씩 무엇을보아야하는지 알기 만하면됩니다 !! – Mike

0

솔루션 :

Kernel.Scan(x => { 
    x.FromAssemblyContaining<CoreModule>(); 
    x.BindingGenerators.Add(new GenericBindingGenerator(typeof(IHandleQuery<,>))); 
     x.InSingletonScope(); 
}); 
1
// use Ninject.Extensions.Conventions for convention-based binding 
kernel.Scan(scanner => 
    { 
     // look for types in this assembly 
     scanner.FromCallingAssembly(); 

     // make ISomeType bind to SomeType by default (remove the 'I'!) 
     scanner.BindWith<DefaultBindingGenerator>(); 
    });