2011-10-05 7 views
2

ninject가 특정 기본 유형의 모든 바인딩에 범위를 설정하도록 지시하는 방법을 찾으려고합니다. 나는 아래에 가까운 생각하지만 그것은 작동하지 않습니다 오브젝트의Ninject에서 특정 기본 인터페이스를 가진 모든 바인딩을 싱글 톤으로 설정하는 방법

var scanner = new AssemblyScanner(); 
scanner.FromCallingAssembly(); 
scanner.BindWith<DefaultBindingGenerator>(); 
kernel.Scan(scanner); 

//maps.Count is always 0 :-(
var maps = kernel.GetBindings(typeof(IMapper<,>)); 
foreach (var map in maps) 
{ 
    map.ScopeCallback = StandardScopeCallbacks.Singleton; 
} 

하나 내가 싱글 할 것을 권장합니다

public interface ILoanApplicationModelToViewMapper : IMapper<LoanApplication, LoanApplicationViewModel> 
{ 
} 

public class LoanApplicationModelToViewMapper : Mapper<LoanApplication, LoanApplicationViewModel>, ILoanApplicationModelToViewMapper 
{ 
} 

답변

1

조립 스캐너는

작업 결국 마법을 가지고
 var scanner = new AssemblyScanner(); 
     scanner.WhereTypeIsNotInNamespace("Loan.Service.Storage.Context"); 
     scanner.WhereTypeIsNotInNamespace("Loan.Service.Mappers"); 
     scanner.FromCallingAssembly(); 
     scanner.BindWith<DefaultBindingGenerator>(); 
     kernel.Scan(scanner); 

     var mapScanner = new AssemblyScanner(); 
     mapScanner.FromCallingAssembly(); 
     mapScanner.WhereTypeIsInNamespace("Loan.Service.Mappers"); 
     mapScanner.BindWith<DefaultBindingGenerator>(); 
     mapScanner.InSingletonScope(); 
     kernel.Scan(mapScanner); 
관련 문제