2014-07-09 2 views
0

우리는 HotTowel Angular + Breeze를 기반으로 배달 레시피를 만들려고합니다. SPA 응용 프로그램의 종속성 삽입 부분은 잘 설명되어 있지만 Unity를 통해 BreezeController를 해결하려는 것은 어려운 일입니다. 나는 거기에 한 가지가 부족할 수도 있지만 알아 내지 못했을 것입니다. 지금까지 여기Breeze 및 Unity Container (HotTowel Angular + Breeze)

는 우리가 한 작업은 다음과 같습니다

  • 추가 BreezeController이에
  • 속성 적용 LoggingController라는 새로운 컨트롤러를 설치 ASP.NET MVC 1404년 5월 3일에 대한
  • 유니티 부트 스트 래퍼 컨트롤러가 생성자를 통해 저장소 종속성을 설정합니다.

모두 훌륭하고 Unity 컨테이너는 UnityMvcActivator.cs를 통해 활성화됩니다. 이 : 그것은 빈 생성자를 찾을 수 없습니다에 대한 오류를 발생시킵니다로

using System.Linq; 
    using System.Web.Mvc; 
    using Microsoft.Practices.Unity.Mvc; 

    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(CC.Web.App_Start.UnityWebActivator), "Start")] 
    [assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(CC.Web.App_Start.UnityWebActivator), "Shutdown")] 

    namespace CC.Web.App_Start 
    { 
     /// <summary>Provides the bootstrapping for integrating Unity with ASP.NET MVC.</summary> 
     public static class UnityWebActivator 
     { 
     /// <summary>Integrates Unity when the application starts.</summary> 
     public static void Start() 
     { 
      var container = UnityConfig.GetConfiguredContainer(); 
      FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
      FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 

      DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

      // TODO: Uncomment if you want to use PerRequestLifetimeManager  
      Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule  (typeof(UnityPerRequestHttpModule)); 
     } 

     /// <summary>Disposes the Unity container when the application is shut down.</summary> 
     public static void Shutdown() 
     { 
      var container = UnityConfig.GetConfiguredContainer(); 
      container.Dispose(); 
     } 
    } 
} 

컨테이너는 컨트롤러를 호출하면 UnityConfig.cs

using System; 
using Microsoft.Practices.Unity; 
using Microsoft.Practices.Unity.Configuration; 
using System.Web.Mvc; 
using Microsoft.Practices.Unity.Mvc; 
using System.Web.Http; 

namespace CC.Web.App_Start 
{ 
    /// <summary> 
    /// Specifies the Unity configuration for the main container. 
    /// </summary> 
    public class UnityConfig 
    { 
     #region Unity Container 
     private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => 
     { 
      var container = new UnityContainer(); 
      RegisterTypes(container); 
      return container; 
     }); 

     /// <summary> 
     /// Gets the configured Unity container. 
     /// </summary> 
     public static IUnityContainer GetConfiguredContainer() 
     { 
      return container.Value; 
     } 
     #endregion 

     /// <summary>Registers the type mappings with the Unity container.</summary> 
     /// <param name="container">The unity container to configure.</param> 
     /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to 
     /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks> 
     public static void RegisterTypes(IUnityContainer container) 
     { 
      // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements. 
      container.LoadConfiguration(); 

      // TODO: Register your types here 
      // container.RegisterType<IProductRepository, ProductRepository>(); 
     } 
    } 
} 

통해 구성은 유니티는 담당하지 않는 것 같다.

나는 라고 생각 하겠지만 스티브가 언급 한 마이크 와슨 블로그 게시물 : config.DependencyResolver = new UnityResolver(container);에서 어떤 리졸버를 사용하는지 제대로 알릴 수 있습니다. UnityDependencyResolver는 IDependencyResolver를 구현합니다.

Nuget 패키지를 설치하는 것이 Unity를 리졸버로 연결하는 데 필요한 것일 뿐이므로 Unity를 Breeze 컨트롤러 용 리졸버로 사용하는 방법이 있는지 또는 단순히 Breeze 컨트롤러를 사용해야하는지 제대로 IOC 내장 구성 요소의 외관으로? 차라리 외관을 통과하는 대신 투명감있게 결의를 다뤄야 할 것입니다.

답변

1

WebApi 컨트롤러 (Breeze 컨트롤러 포함)를 해결하려면 Unity.AspNet.WebApi 패키지가 필요합니다.

또한 Unity를 사용하여 종속성을 해결하도록 WebApi에 지시해야합니다. 일반적으로 이것은 Global.asax.cs에서 호출하는 정적 메서드에서 수행됩니다. This blog post by Mike Wasson은 모든 것을 낳습니다.

Unity.WebAPI Github pageUnityConfig.RegisterComponents() 리포지토리 등록 방법을 사용하는 것이 좋습니다.

+0

스티브에게 감사드립니다. 대신 Unity.AspNet.WebApi 부트 스트랩퍼를 사용해 보겠습니다. –