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

Создадим три класса NinjectDependencyResolver, NinjectDependencyScope и NinjectRegistrations.

  1. В 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)
        {
            if (this.resolver == null)
            {
                throw new ObjectDisposedException("this", "This scope has already been disposed");
            }
    
            return this.resolver.TryGet(serviceType);
        }
    
        public IEnumerable<object> GetServices(Type serviceType)
        {
            if (this.resolver == null)
            {
                throw new ObjectDisposedException("this", "This scope has already been disposed");
            }
    
            return this.resolver.GetAll(serviceType);
        }
    }
    
  2. В NinjectDependencyResolver реализуем интерфейс System.Web.Http.Dependencies.IDependencyResolver
    public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver, 
    System.Web.Mvc.IDependencyResolver
    {
        private readonly IKernel kernel;
    
        public NinjectDependencyResolver(IKernel kernel)
    : base(kernel)
        {
            this.kernel = kernel;
        }
    
        public IDependencyScope BeginScope()
        {
            return new NinjectDependencyScope(this.kernel.BeginBlock());
        }
    }
    
  3. В NinjectRegistrations реализуем абстрактный класс Ninject.Modules.NinjectModule.
    public class NinjectRegistrations : NinjectModule
    {
        public override void Load()
        {
            // Bind<IMyService>().To<MyService>().InSingletonScope();
        }
    }
    
  4. Для того чтобы наш объект NinjectDependencyResolver понимал и mvc — пропишем нашему классу интерфейс System.Web.Mvc.IDependencyResolver.
    public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver, 
    System.Web.Mvc.IDependencyResolver
    
  5. Добавим строчки в Global.asax
    NinjectModule registrations = new NinjectRegistrations();
    var kernel = new StandardKernel(registrations);
    var ninjectResolver = new NinjectDependencyResolver(kernel);
    
    DependencyResolver.SetResolver(ninjectResolver); // MVC
    GlobalConfiguration.Configuration.DependencyResolver = ninjectResolver; // Web API
    

Ссылки:

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

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

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

Допустим есть свойство, через которое ninject внедряет зависимость [Inject] public IUsersService UsersService { get; set; } И очень хочется скрыть Read more

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

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

Ninject и AOP

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

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

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