1

Microsoft UnityをIoCコンテナとして使用して新しいASP.Net Web APIプロジェクトを作成しています。私はちょっと混乱して、どちらが正しいのか分かりません。System.Web.Http.HttpConfigurationのDependencyResolverとSystem.Web.MvcのDependencyResolver

DependencyResolverSystem.Web.Http.HttpConfigurationに設定すると、その後、依存関係を持つAPIコントローラを呼び出すことができ、依存関係はUnityフレームワークによって解決されています。しかし、HomeControllerのようなMVCコントローラの場合、DependencyResolverSystem.Web.Mvcに設定するまで、Unityは依存性を注入できません。

APIコントローラの依存関係は解決されましたが、MVCコントローラの依存関係は解決されません。以下のコードを追加した場合:

public class IocConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var container = UnityConfig.GetConfiguredContainer(); 
     FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
     FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 
     config.DependencyResolver = new UnityResolver(container); 
     //DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 
} 

MVCコントローラの依存関係は正常に解決されましたが、APIコントローラの依存関係は解決されません。私は:(ラインをアンコメント以下のコードを追加した場合)

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

ちょうどあなたがプロジェクトテンプレートは、ASP.NetのWeb APIであることを知っていると私はMicrosoft.Unityを使用しています。

DependencyResolverのいずれかを設定する必要がありますか、何か間違っていますか?

+2

のために使用される名前空間は、あなたが両方設定します。 –

答えて

1

MVCとWeb APIを同じプロジェクトで使用する場合は、両方のリゾルバを設定する必要があります。同じコード位置でそうしている場合は、名前空間の先頭にリゾルバを区切ります。

var container = UnityConfig.GetConfiguredContainer(); 

FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 

//MVC 
DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container)); 
//Web API 
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 

注プロジェクトは、MVCフレームワークとWEBAPIの両方が含まれている場合、別のDependencyResolver

関連する問題