Веб-API.UnityDependencyResolver не реализует Microsoft.Практика.Объектов servicelocation.IServiceLocator. Параметр: commonServiceLocator
Я пытаюсь запустить следующий код:
using System.Web.Http;
using System.Web.Mvc;
using Conduit.Mam.ClientSerivces.Dal.Configuration;
using MamInfrastructure.Common.Dal;
using MamInfrastructure.Common.Logger;
using MamInfrastructure.Logger;
using Microsoft.Practices.Unity;
using Unity.WebApi;
namespace Conduit.Mam.ClientServices.Common.Initizliaer
{
public static class Initializer
{
private static bool isInitialize;
private static readonly object LockObj = new object();
private static IUnityContainer defaultContainer = new UnityContainer();
static Initializer()
{
Initialize();
}
public static void Initialize()
{
if (isInitialize)
return;
lock (LockObj)
{
IUnityContainer container = defaultContainer;
//registering Unity for web API
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
//registering Unity for MVC
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
container.RegisterType<IDal<ClientService.DAL.EntityFramework.MamConfiguration>, MamConfigurationDal>();
container.RegisterType<IApplicationLogger, Log4NetLogger>();
if (!isInitialize)
{
isInitialize = true;
}
}
}
}
}
ad получите следующее исключение:
The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.
Parameter name: commonServiceLocator
Я попытался установить пакет webApi, но это не помогло
2 ответов
в своем Initialize
способ заменить:
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
С:
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
теперь вы понимаете, в чем проблема:
System.Web.Http.Dependencies.IDependencyResolver
(используется веб-API) и System.web.Mvc.IDependencyResolver
(используется ASP.NET MVC) - это два совершенно разных типа (даже если они имеют одно и то же имя), и все же вы пытаетесь назначить оба из них одному типу (UnityDependencyResolver
), который, очевидно, не может работать.
У меня была аналогичная проблема, но в моем случае мое веб-приложение имеет контроллеры MVC и WebApi. Я решил так:
using Microsoft.Practices.Unity;
using System.Web.Http;
using System.Web.Mvc;
using Unity.Mvc5;
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
где первая строка будет использовать MVC DependencyResolver, а во второй строке я использую WebAPI UnityDependencyResolver.