В Ninject, как установить все привязки с определенным базовым интерфейсом на singleton - PullRequest
2 голосов
/ 05 октября 2011

Я пытаюсь выяснить, как сказать 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 Ответ

1 голос
/ 05 октября 2011

В сборочном сканере есть какая-то магия, которая в итоге сработала

        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);
...