우리는 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 내장 구성 요소의 외관으로? 차라리 외관을 통과하는 대신 투명감있게 결의를 다뤄야 할 것입니다.
스티브에게 감사드립니다. 대신 Unity.AspNet.WebApi 부트 스트랩퍼를 사용해 보겠습니다. –