최근에 Web API 템플릿을 사용하여 샘플 응용 프로그램을 만듭니다.컨트롤러에 매개 변수없는 public 생성자가 있는지 확인하십시오. Microsoft Unity에서 매개 변수를 확인할 수 없습니다.
public interface IUtilityService
{
string GetToken(int length);
}
public class UtilityService : IUtilityService
{
public string GetToken(int length)
{
return "ABC";
}
}
UnityConfig
및 UnityWebActivator
그냥 패키지를 설치하여 만들어지고 난 그냥 다음과 같이 내 자신의 서비스를 등록 :
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();
}
다음으로 나는 또한 마이크로 소프트 유니티 MVC 패키지를 설치 및 테스트 서비스를 추가
그리고 UnityConfig : 나는 시험 a를 실행하면
public class UnityConfig
{
#region Unity Container
private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
});
public static IUnityContainer GetConfiguredContainer()
{
return container.Value;
}
#endregion
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<IUtilityService, UtilityService>();
}
}
마이크로 소프트 유니티 홈 컨트롤러에서 내 서비스를 해결 pplication 그러나 JQuery에서 Values 컨트롤러 내부의 메서드를 호출하면 서비스를 확인할 수 없습니다.
코드
은 다음과 같습니다 :private readonly IUtilityService utilityService;
public HomeController(IUtilityService utilityService)
{
this.utilityService = utilityService;
}
public ActionResult Index()
{
ViewBag.Title = utilityService.GetToken(10);
return View();
}
을 그리고 값 컨트롤러는 다음과 같다 :
private readonly IUtilityService utilityService;
public ValuesController(IUtilityService utilityService)
{
this.utilityService = utilityService;
}
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
이것은 또한 내가 값 컨트롤러 호출하는 jQuery 코드입니다 :
$(document).ready(function() {
console.log("ready!");
$('#call').click(function() {
$.ajax({
type: "GET",
dataType: 'json',
url: "api/Values",
success: function (response) {
console.log("success!");
},
error: function (response, textStatus, errorThrown) {
console.log("error!");
}
});
})
});
에게
하나 내가 값을 컨트롤러에 아약스 호출을 실행하려면 버튼을 클릭하십시오 나는 아래 오류가 나타납니다 매개 변수가 적은 생성자가 없기 때문에 컨트롤러를 시작할 수 없습니다.
오류 :
보통을 초기화 할 때 프레임 워크는 컨트롤러의 종속성을 해결할 수 없음을 나타냅니다 공통 도움이되지 않는 오류 메시지입니다An error occurred when trying to create a controller of type 'ValuesController'. Make sure that the controller has a parameterless public constructor.
WebApiConfig.cs의 HttpConfiguration.DependencyResolver에 유니티 컨테이너를 추가 했습니까? –
UnityWebActivator 클래스에서이 코드 줄이 충분하다고 생각합니다. DependencyResolver.SetResolver (새로운 UnityDependencyResolver (컨테이너)); – ali