.NET профилирование памяти / риски утечек / Ninject / корни прямых делегатов - PullRequest
1 голос
/ 07 июля 2011

Я профилирую приложение, которое использует Ninject для DI. Со временем я вижу много экземпляров класса BindingBuilder, который используется для определения объектов, определенных в контейнере.

Привязка Ninject «ToMethod» используется для определения всех объектов в контейнере. Контекст, доступный в lamba для доступа к ядру, затем используется для извлечения других объектов из контейнера. Пример:

Bind<IService>()
    .ToMethod(ctx => new CustomService(
        ctx.Kernel.GetDefault<IOtherService>(), 
        ctx.Kernel.GetDefault<IAnotherService>()
    ))
    .InSingletonScope();

Это нормальное поведение, когда BindingBuilders увеличивается со временем или эти ссылки существуют только один раз?

1 Ответ

2 голосов
/ 07 июля 2011

ToMethod создает новый анонимный класс в BindingBuilder для лямбда-выражения.То, что вы видите, это не экземпляр BindingBuilder, а что-то вроде BindingBuilder<T>+c__DisplayClass1<IService>

Более того, вы не используете Ninject по назначению.Привязка выше может быть написана гораздо проще.Пусть Ninject решает, что вводить, вместо добавления определения explizit.

Bind<IService>().To<CustomService>.InSingletonScope();
...