9

Я пытаюсь добавить замок Виндзор в моем проекте Web API, и я следую this post, но я получаю ошибку во время компиляции на этой строке кода:Почему CastleWindsor's BeginScope выходит из сферы действия?

this._scope = container.BeginScope(); 

... как "«Замок .Windsor.IWindsorContainer 'не содержит определения для «BeginScope» и не может быть найден метод расширения «BeginScope», принимающий первый аргумент типа «Castle.Windsor.IWindsorContainer» (вам не хватает директивы использования или ссылки на сборку?) "

Вот полный код, который можно увидеть в контексте:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http.Dependencies; 
using Castle.Windsor; 
using Castle.MicroKernel.Registration; 
using System.Web.Http; 

namespace PlatypiPieServer 
{ 
    public class WindsorDependencyResolver : IDependencyResolver 
    { 
     private readonly IWindsorContainer _container; 

     public WindsorDependencyResolver(IWindsorContainer container) 
     { 
      _container = container; 
     } 

     public IDependencyScope BeginScope() 
     { 
      return new WindsorDependencyScope(_container); 
     } 

     public object GetService(Type serviceType) 
     { 
      if (_container.Kernel.HasComponent(serviceType)) 
       return this._container.Resolve(serviceType); 
      else 
       return null; 
     } 

     public IEnumerable<object> GetServices(Type serviceType) 
     { 
      return _container.ResolveAll(serviceType).Cast<object>(); 
     } 

     public void Dispose() 
     { 
      _container.Dispose(); 
     } 
    } 

    public class WindsorDependencyScope : IDependencyScope 
    { 
     private readonly IWindsorContainer _container; 
     private readonly IDisposable _scope; 

     public WindsorDependencyScope(IWindsorContainer container) 
     { 
      this._container = container; 
      this._scope = container.BeginScope(); 
     } 

     public object GetService(Type serviceType) 
     { 
      if (_container.Kernel.HasComponent(serviceType)) 
       return _container.Resolve(serviceType); 
      else 
       return null; 
     } 

     public IEnumerable<object> GetServices(Type serviceType) 
     { 
      return this._container.ResolveAll(serviceType).Cast<object>(); 
     } 

     public void Dispose() 
     { 
      this._scope.Dispose(); 
     } 
    } 

    public class ApiControllersInstaller : IWindsorInstaller 
    { 
     public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store) 
     { 
      container.Register(Classes.FromThisAssembly() 
      .BasedOn<ApiController>() 
      .LifestylePerWebRequest()); 
     } 
    } 
} 

Где BeginScope? Было ли это устаревшим?

ответ

18

Это метод расширения. Вам нужно импортировать пространство имен Castle.MicroKernel.Lifestyle.

Смежные вопросы