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

コントローラーが ApiController クラスに基づいている Web Api の場合、次を使用する必要があります。

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

この意味は

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

アプリケーションの MVC 側の Dependency Resolver として Unity を登録するために使用されます。

(Unity を MVC と WebApi の両方に登録したい場合は、両方のステートメントを使用できます)

System.Web.Http バージョン エラーが発生した場合は、System.Web.Http.dll を参照から削除し、Unit.WebApi を削除してみてください。次に、Unity.WebAPI.5.1 Nuget パッケージを再度追加すると、問題ないはずです。

于 2014-02-09T00:01:26.930 に答える