0

我正在尝试在我的 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;
    }
4

2 回答 2

3

代替 MVC DependencyResolver,使用 Web API 特定的 GlobalConfiguration 解析器。例如:

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

如果您为 ASP.NET Web API 使用 Unity 引导程序,则会在安装时为您设置。

于 2013-10-28T06:48:06.720 回答
0

对于 Web Api,您的控制器基于 ApiController 类,您应该使用:

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

这意味着

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

用于将 Unity 注册为应用程序 MVC 端的 Dependency Resolver。

(如果你想为 MVC 和 WebApi 注册 Unity,你可以同时拥有这两个语句)

如果您收到 System.Web.Http 版本错误,请尝试从您的引用中删除 System.Web.Http.dll 并删除 Unit.WebApi。然后重新添加 Unity.WebAPI.5.1 Nuget 包就可以了。

于 2014-02-09T00:01:26.930 回答