2014-09-22 3 views
0

Nuget를 사용하여 Ninject.Web.WebAPI 패키지를 설치 했으므로 종속성을 바인딩하는 방법을 알 수 없습니다.WebAPI를 사용하여 ninject를 사용하여 종속성을 설정하는 방법

정기적으로 Ninject를 MVC 응용 프로그램과 함께 사용하며 Ninject 패키지를 설치하면 바인딩을 설정하는 NinjectWebCommon.cs 파일이 만들어집니다. 이 파일은 WebAPI 프로젝트에 대해 생성되지 않습니다.

누구나 내 바인딩을 어디에 둘 것인지 알려주세요.

환호

답변

1

는 웹 API의 NinjectDependencyResolver 문제를 해결하기 위해 클래스를 만듭니다.

public class NinjectDependencyResolverHelper : IDependencyScope 
    { 
     IResolutionRoot resolver; 
     public NinjectDependencyResolverHelper(IResolutionRoot resolver) 
     { 
      this.resolver = resolver; 
     } 
     public object GetService(Type serviceType) 
     { 
      if (resolver == null) 
       throw new ObjectDisposedException("this", "This scope has been disposed"); 
      return resolver.TryGet(serviceType); 
     } 
     public System.Collections.Generic.IEnumerable<object> GetServices(Type serviceType) 
     { 
      if (resolver == null) 
       throw new ObjectDisposedException("this", "This scope has been disposed"); 
      return resolver.GetAll(serviceType); 
     } 
     public void Dispose() 
     { 
      var disposable = resolver as IDisposable; 
      if (disposable != null) 
       disposable.Dispose(); 
      resolver = null; 
     } 
    } 
    public class NinjectDependencyResolver : NinjectDependencyResolverHelper, IDependencyResolver 
    { 
     IKernel kernel; 
     public NinjectDependencyResolver(IKernel kernel) 
      : base(kernel) 
     { 
      this.kernel = kernel; 
     } 
     public IDependencyScope BeginScope() 
     { 
      return new NinjectDependencyResolverHelper(kernel.BeginBlock()); 
     } 
    } 

그런 다음 NinjectWebCommon 클래스이 도움이

public static class NinjectWebCommon 
{ 
    private static readonly Bootstrapper bootstrapper = new Bootstrapper(); 

    /// <summary> 
    /// Starts the application 
    /// </summary> 
    public static void Start() 
    { 
     DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
     DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
     bootstrapper.Initialize(CreateKernel); 
    } 

    /// <summary> 
    /// Stops the application. 
    /// </summary> 
    public static void Stop() 
    { 
     bootstrapper.ShutDown(); 
    } 

    /// <summary> 
    /// Creates the kernel that will manage your application. 
    /// </summary> 
    /// <returns>The created kernel.</returns> 
    private static IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
     kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 

     GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 

     RegisterServices(kernel); 
     return kernel; 
    } 

    /// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 
     //Bind your stuff    
    }   
} 

희망을 만듭니다.

+0

사실, 최신 버전의 'Ninject.Web.WebApi' ("WebApi 2 용 Ninject Integration", 버전 3.2.1.0 이상)는 사용자 정의가 필요하지 않습니다. NinjectWebCommon.cs에서 패키지를 추가하고 모든 것을 정상적으로 등록하십시오. –

관련 문제