Записи с меткой «ninject»

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

Ninject это IoC контейнер для .NET платформы. Установим его и настроим. Установим ninject с помощью менеджера nuget Создадим класс который создает контейнер и разрешает зависимости всех объектов using System; using System.Collections.Generic; using System.Web.Mvc; using Ninject; using Ninject.Parameters; using Ninject.Syntax; using System.Configuration; namespace WebApp.Infrastructure { public class NinjectDependencyResolver : IDependencyResolver { private IKernel kernel; public NinjectDependencyResolver() { …

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

Допустим есть свойство, через которое ninject внедряет зависимость [Inject] public IUsersService UsersService { get; set; } И очень хочется скрыть это свойство, так как данное свойство используется только внутри класса. Для этого делаем свойство защищенным или приватным [Inject] proteced virtual IUsersService UsersService { get; set; } И в Global.cs прописываем следующие строки var kernel = …

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

Создадим пользовательский атрибут ValueAttribute, который будет производным от атрибута InjectAttribute. Данный атрибут достает значение из appSettings, а Inject в свою очередь запишет это значение в указанное свойство. Реализация ValueAttribute: public class ValueAttribute : InjectAttribute { private static NameValueCollection _appSettings = WebConfigurationManager. AppSettings as NameValueCollection; public string Value { get; private set; } public ValueAttribute(string key) …

Ninject и AOP

Ninject имеет много расширений. Одно из полезных расширений это Ninject.Extensions.Interception.DynamicProxy. Данное расширение позволяет перехватывать вызовы методов, что позволяет вынести сквозную функциональность из наших модулей. Установим данный пакет и вынесем логику работы с транзакциями в Intercepter (перехватчик). Установим пакет Ninject.Extensions.Interception.DynamicProxy при помощи менеджера пакетов nuget. Создадим перехватчик для работы с транзакциями: public class TransactionInterceptor : IInterceptor { …

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

Создадим три класса NinjectDependencyResolver, NinjectDependencyScope и NinjectRegistrations. В NinjectDependencyScope реализуем интерфейс System.Web.Http.Dependencies.IDependencyScope public class NinjectDependencyScope : IDependencyScope { private IResolutionRoot resolver; internal NinjectDependencyScope(IResolutionRoot resolver) { Contract.Assert(resolver != null); this.resolver = resolver; } public void Dispose() { var disposable = this.resolver as IDisposable; if (disposable != null) { disposable.Dispose(); } this.resolver = null; } public object GetService(Type serviceType) { …

Используем Ninject.Extensions.Conventions для автоматической регистрации сервисов (c#, ninject)

Как и любой di контейнер ninject предоставляет возможность делать автоматическую регистрацию объектов. Это полезно тем что может избавить от неинтересной работы и так же полезно начинающим программистам, которые незнакомые с внедрением зависимостей и как работать с di контейнером. Весь фокус автоматической регистрации заключается в том что при именовании интерфейсов и сервисов нужно соблюдать некие соглашения. …

Делаем позднее связывание при помощи ninject (c#)

Для этого устанавливаем пакет Ninject.Extensions.Xml при помощи менеджера пакета nuget. Создаем файл NinjectRegistrations.xml в корне приложения <module name=»NinjectRegistrations»> <bind service=»WebApp.Interfaces.IElmahWrap, Core» to=»WebApp.Mvc.Infrastructure.ElmahWrap, PresentationLogic» scope=»singleton» /> <bind service=»WebApp.Interfaces.ICaptcha, PresentationLogic» to=»WebApp.Infrastructure.DefaultCaptcha, PresentationLogic» scope=»singleton» /> </module> В Global.cs прописываем следующие строки var kernel = new StandardKernel(); if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + «\\NinjectRegistrations.xml»)) kernel.Load(AppDomain.CurrentDomain.BaseDirectory + «\\NinjectRegistrations.xml»);