Скрываем публичные свойства, через которых происходит внедрение зависимостей 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 создает прокси объект и внедрение через зависимость становится возможным.

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

По теме:
Устанавливаем и настраиваем Ninject

Ninject это IoC контейнер для .NET платформы. Установим его и настроим. Установим ninject с помощью менеджера nuget Создадим класс который создает Read more

Получаем данные из appSettings при помощи Ninject

Создадим пользовательский атрибут ValueAttribute, который будет производным от атрибута InjectAttribute. Данный атрибут достает значение из appSettings, а Inject в свою Read more

Ninject и AOP

Ninject имеет много расширений. Одно из полезных расширений это Ninject.Extensions.Interception.DynamicProxy. Данное расширение позволяет перехватывать вызовы методов, что позволяет вынести сквозную Read more

Настраиваем Ninject для web api и mvc

Создадим три класса NinjectDependencyResolver, NinjectDependencyScope и NinjectRegistrations. В NinjectDependencyScope реализуем интерфейс System.Web.Http.Dependencies.IDependencyScope public class NinjectDependencyScope : IDependencyScope { private IResolutionRoot resolver; internal NinjectDependencyScope(IResolutionRoot Read more

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *