MVCおよび初期化WEBAPIで1.MEFは、それらは次のように実装されたインタフェースであり、異なっています。
インターフェイスを実装する// WEBAPIの必要性 System.Web.Http.Dependencies.IDependencyResolver // MVCは、インターフェースを実装する必要があります System.Web.Mvc.IDependencyResolver
次のように2.MEFコードは次のとおりです。
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.ComponentModel.Compositionを。 使用してSystem.ComponentModel.Composition.Hostingを。 使用してSystem.ComponentModel.Composition.Primitivesを。 使用してSystem.Linqのを。 使用してSystem.Textのを。 使用してのSystem.Webを。 使用してSystem.Web.Mvcを。 使用してSystem.Web.Http.Dependenciesを。 名前空間Test.Domain.Infrastructure.Ioc { パブリック クラス MefDependencySolver:System.Web.Http.Dependencies.IDependencyResolver、System.Web.Mvc.IDependencyResolver // :IDependencyResolver { プライベート 読み取り専用ComposablePartCatalog _catalog。 民間 のconst 文字列 MefContainerKey = " MefContainerKey " 。 公共MefDependencySolver(ComposablePartCatalogカタログ) { _catalog = カタログ。 } 公共CompositionContainerコンテナ { 取得する { もし(!HttpContext.Current.Items.Contains(MefContainerKey)) { HttpContext.Current.Items.Add(MefContainerKey、新しいCompositionContainer(_catalog)); } CompositionContainerコンテナ = (CompositionContainer)HttpContext.Current.Items [MefContainerKey]。 HttpContext.Current.Application [ " コンテナ" ] = コンテナ。 戻り値のコンテナ。 } } #region IDependencyResolverメンバー パブリック オブジェクトのgetService(タイプのServiceType) { ストリング contractName = AttributedModelServices.GetContractName(サービス種別)。 リターン Container.GetExportedValueOrDefault < オブジェクト > (contractName)。 } 公共のIEnumerable < オブジェクト > GetServices(タイプのServiceType) { 戻り Container.GetExportedValues < オブジェクト > (serviceType.FullName)。 } #endregion /// <要約> /// BeginScope /// </要約> /// <戻る> </戻り> 公共IDependencyScope BeginScope() { 返す 新しいMefDependencySolver(_catalogを)。 } 公共 のボイドのDispose() { // ToDoリスト } } }
3.次のようにWebApiConfig.csファイルセットMEF初期化コードです。
// 初期設定MEF DirectoryCatalogカタログ= 新新DirectoryCatalog(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath)。 MefDependencySolverソルバー = 新しいMefDependencySolver(カタログ); config.DependencyResolver =ソルバー。
転送:https://blog.csdn.net/allenwdj/article/details/50509340?t=1484492702237