MEFはWEBAPIに適用されます

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

おすすめ

転載: www.cnblogs.com/JYuAn/p/12363621.html