Скрываем публичные свойства, через которых происходит внедрение зависимостей ninject (c#)

Допустим есть свойство, через которое ninject внедряет зависимость

[Inject]
public IUsersService UsersService { get; set; }

И очень хочется скрыть это свойство, так как данное свойство используется только внутри класса.

Для этого делаем свойство защищенным или приватным

[Inject]
proteced virtual IUsersService UsersService { get; set; }

И в Global.cs прописываем следующие строки

var kernel = new StandardKernel(
    new NinjectSettings
    {
        InjectNonPublic = true
    }
);

Вот и все! При таком раскладе ninject создает прокси объект и внедрение через зависимость становится возможным.

ЗЫ: Нужно помнить, что скрытие внедряемых зависимостей очень плохая практика. Так как такие зависимости нельзя увидеть, когда класс скомпилирован.