2013-10-27 41 views
0

我想在我的WebAPI解决方案中使用Unity,并试图从web.config文件加载配置。WebAPI,Unity和Web.config

这是在web.config中团结节:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
    <assembly name="MyWebAPI" /> 
    <namespace name="MyWebAPI.Controllers" /> 
    <container> 
    <register type="MyController" mapTo="MyController"> 
     <constructor> 
     <param name="param1"> 
      <value value="val1" /> 
     </param> 
     <param name="param2"> 
      <value value="val2" /> 
     </param> 
     <param name="param3"> 
      <value value="val3" /> 
     </param> 
     </constructor> 
     <lifetime type="singleton" /> 
    </register> 
    </container> 
</unity> 

的Bootstrapper.cs:

public static IUnityContainer Initialise() 
{ 
    var container = BuildUnityContainer(); 

    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

    return container; 
} 

private static IUnityContainer BuildUnityContainer() 
{ 
    var container = new UnityContainer(); 

    // register all your components with the container here 
    // it is NOT necessary to register your controllers 

    // e.g. container.RegisterType<ITestService, TestService>();  
    RegisterTypes(container); 

    return container; 
} 

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterType<MyController>(); 
    container.LoadConfiguration(); 
} 

在Global.asax:

protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     Bootstrapper.Initialise(); 
    } 

但这不是工作我作为参数没有进入构造函数。

的的WebAPI控制器构造:

public MyController(string param1, string param2, string param3) 
    { 
     _param1 = param1; 
     _param2 = param2; 
     _param3 = param3; 
    } 

回答

3

相反MVC DependencyResolver的,使用Web API的具体GlobalConfiguration解析器。例如:

GlobalConfiguration.Configuration.DependencyResolver = 
    new UnityDependencyResolver(container); 

如果您使用Unity bootstrapper for ASP.NET Web API,则会在安装时为您设置。

+1

我试过...我将代码改为GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);但现在我收到此错误无法加载文件或程序集'System.Web.Http,版本= 4.0.0.0,文化=中立,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040) – Looking4Help

0

对于Web的API,在您的控制器是基于ApiController类,你应该使用:

GlobalConfiguration.Configuration.DependencyResolver = 
new UnityDependencyResolver(container); 

这意味着

DependencyResolver.SetResolver(
new Unity.Mvc3.UnityDependencyResolver(container)); 

用于注册团结的依赖解析器的MVC你的应用程序的一面。

(你可以有两个语句,如果你想注册团结两个MVC和的WebAPI)

如果你得到System.Web.Http版本错误,然后尝试从删除System.Web.Http.dll你的引用并删除Unit.WebApi。 然后重新添加Unity.WebAPI.5.1 Nuget包,它应该没问题。