WebApi.UnityDependencyResolver ne pas mettre en œuvre de Microsoft.Les pratiques.ServiceLocation.IServiceLocator. Paramètre : commonServiceLocator
J'essaie d'exécuter le code suivant:
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 obtenir de l'exception suivante:
The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.
Parameter name: commonServiceLocator
J'ai essayé d'installer webApi package, mais il n'a pas aidé
Vous devez vous connecter pour publier un commentaire.
Dans votre
Initialize
méthode remplacer:avec:
Maintenant, vous comprenez ce qu'est le problème:
System.Web.Http.Les dépendances.IDependencyResolver
(utilisé par l'API Web) etSystem.web.Mvc.IDependencyResolver
(utilisé par ASP.NET MVC) sont deux totalement différents types (même si ils ont le même nom), et pourtant, vous tentez d'affecter tous les deux pour le même type (UnityDependencyResolver
) qui, évidemment, ne peuvent pas travailler.GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
il ne fonctionne pasThe type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter name: commonServiceLocator
J'ai eu un problème similaire, mais dans mon cas, mon application web MVC et WebApi Contrôleurs.
Je l'ai résolu comme ceci:
Où la première ligne va utiliser le MVC DependencyResolver et dans la deuxième ligne, j'utilise le WebApi UnityDependencyResolver.