Ela*_*nda 11 c# asp.net unity-container asp.net-mvc-4 asp.net-web-api
我尝试运行以下代码:
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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
广告获得以下异常:
The type Unity.WebApi.UnityDependencyResolver does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.
Parameter name: commonServiceLocator
我试图安装webApi包但它没有帮助
Dar*_*rov 25
在你的Initialize方法中替换:
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)
有:
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)
现在您了解问题所在:
System.Web.Http.Dependencies.IDependencyResolver(由Web API使用)和System.web.Mvc.IDependencyResolver(由ASP.NET MVC使用)是两种完全不同的类型(即使它们具有相同的名称),但您尝试将它们分配给相同的类型(UnityDependencyResolver),这显然无法工作.
小智 11
我有一个类似的问题,但在我的情况下,我的Web应用程序有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);
Run Code Online (Sandbox Code Playgroud)
第一行将使用MVC DependencyResolver,第二行使用WebApi UnityDependencyResolver.
| 归档时间: |
|
| 查看次数: |
22654 次 |
| 最近记录: |