Castle.Windsorは、高度なアプリケーションの注射に頼る_Castle.Windsor.3.1.0

1.コード依存的[部品登録サービスクラス]を使用して

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Textのを。
使用してCastleDemo.Libを。
使用してCastle.Windsorを。
使用してCastle.Windsor.Configuration.Interpretersを。
使用してCastle.MicroKernel.Registrationを。
名前空間CastleDemo.Lib.Mgr 
{ 
///  <要約> 
/// 管理类
 ///  </要約> 
公共 部分 クラスモンシニョール
{ 
    プライベート 静的 IWindsorContainerコンテナ= NULL ;
    ///  <要約>
    /// 自定义容器和组件注册
     ///  </要約> 
    ///  <戻る> </戻り> 
    パブリック 静的IWindsorContainer GetContainer()
    { 
        場合(容器== NULL 
        { 
            タイプobjTypeA = Type.GetType(" CastleDemo .Lib.Oracle.OracleDatabase、CastleDemo.Lib.Oracle " ); 
            入力objTypeB = Type.GetType(" CastleDemo.Lib.Sql.SqlDatabase、CastleDemo.Lib.Sql " )。
            // 建立容器 
            IWindsorContainer tmpContainer = 新しいWindsorContainer();
            // 加入组件:旧版
             // tmpContainer.AddComponent( "CastleDemo.Lib.Oracle.OracleDatabase"、typeof演算(するIDatabase)、objTypeA)。
            // tmpContainer.AddComponent( "CastleDemo.Lib.Sql.SqlDatabase"、typeof演算(するIDatabase)、objTypeB)。
            // 加入组件:新版 
            tmpContainer.Register(Component.For(typeof演算。(するIDatabase))ImplementedBy(objTypeA).Named(" CastleDemo.Lib.Oracle.OracleDatabase " )); 
            tmpContainer.Register(Component.For(typeof演算(するIDatabase))ImplementedBy(objTypeB).Named(" CastleDemo.Lib.Sql.SqlDatabase " ))。
            コンテナ =tmpContainer; 
        } 
        戻り容器。
    } 
} 
}

2. [反映] [成分登録コード方式は、完全に同様の文字列を依存しません]

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Textのを。
使用してCastle.Windsorを。
使用してCastle.Windsor.Configuration.Interpretersを。
使用してCastle.MicroKernel.Registrationを。
名前空間CastleDemo.Lib.Container 
{ 
///  <要約> 
/// 管理类
 ///  </要約> 
パブリック 部分 クラスコンテナ
{ 
    プライベート 静的 IWindsorContainerコンテナ= NULL ;
    ///  <要約> 
    ///自定义容器和组件注册
     ///  </要約> 
    ///  <戻る> </戻り> 
    パブリック 静的IWindsorContainer GetContainer()
    { 
        場合(容器== NULL 
        { 
            タイプOBJTYPE = Type.GetType(" CastleDemo.Lib。するIDatabase、CastleDemo.Lib " ); 
            入力objTypeA = Type.GetType(" CastleDemo.Lib.Oracle.OracleDatabase、CastleDemo.Lib.Oracle " )。
            入力objTypeB = Type.GetType(" CastleDemo.Lib.Sql.SqlDatabase、CastleDemo.Lib.Sql " )。
            // コンテナを作成 
            IWindsorContainer tmpContainer = 新しい新しいWindsorContainerを();
             //は、コンポーネントを追加します:古い
             // tmpContainer.AddComponent( "CastleDemo.Lib.Oracle.OracleDatabase"、OBJTYPE、objTypeA);
             // tmpContainer.AddComponent(「CastleDemo.Libを。 Sql.SqlDatabase」、OBJTYPE、objTypeB);
             // 追加コンポーネント:新しい 
            tmpContainer.Register(Component.For(OBJTYPE).ImplementedBy(objTypeA).Named(" CastleDemo.Lib.Oracle.OracleDatabase " )); 
            tmpContainer.Register( Component.For(OBJTYPE).ImplementedBy(objTypeB).Named(" CastleDemo.Lib.Sql.SqlDatabase ")); 
            コンテナ = tmpContainer。
        } 
        戻り容器。
    } 
} 
}

3.コンポーネントに依存しない設定ファイルを使用して[登録]

3.1定義プロファイル

<?xmlのバージョン= "1.0" ?> 
< 設定> 
  < configSections > 
    < セクション= "城" タイプ= "Castle.Windsor.Configuration.AppDomain.CastleSectionHandler、Castle.Windsor"  /> 
  </ configSections > 
  < > 
    < コンポーネント> 
      < コンポーネント= "CastleDemo.Lib.Oracle.OracleDatabase" タイプ= "CastleDemo.Lib.Oracle.OracleDatabase、CastleDemo.Lib.Oracle" サービス= "CastleDemo.Lib.IDatabase、CastleDemo.Lib"
      名前= "CastleDemo.Lib.Sql.SqlDatabase" タイプ= "CastleDemo.Lib.Sql.SqlDatabase、CastleDemo.Lib.Sql" サービス= "CastleDemo.Lib.IDatabase、CastleDemo.Lib" /> 
    </ 部品> 
  </ > 
< スタートアップ> < supportedRuntimeのバージョン= "V4.0" SKU =」。NETFramework、バージョン= V4.0" /> </ スタートアップ> 
</ 設定>

3.2読むconfig設定ファイルのコンポーネントの登録

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Textのを。
使用してCastleDemo.Libを。
使用してCastle.Windsorを。
使用してCastle.Windsor.Configuration.Interpretersを。
使用してCastle.MicroKernel.Registrationを。
名前空間CastleDemo.Run 
{ 
    パブリック 部分 クラスヘルパー
    { 
        ///  <要約> 
        /// 根据配置文件里的服务名生成
        对象///  </要約> 
        パブリック 静的 ボイドGetFrom_Config() 
        {
            IWindsorContainerコンテナ = 新しい WindsorContainer(新しいXmlInterpreter())。
            文字列 vServiceName = " CastleDemo.Lib.Oracle.OracleDatabase " // 服务名 
            vServiceName = " CastleDemo.Lib.Sql.SqlDatabase " もし(!コンテナ= NULL 
            { 
                するIDatabase DB = container.Resolve <するIDatabase> (vServiceName)。
                もし(デシベル!= nullの
                { 
                    db.Select(" .......... " ); 
                } 
            } 
        } 
    } 
}

4。

 

5.城寿命成分の容器、いくつかあります


一つだけで5.1シングルトン:.コンテナが作成されます。

 

5.2過渡:.たびに新しいインスタンスを作成するための要求

 

5.3 PerThread :.各スレッドには、インスタンスが1つしかありません

 

5.4 PerWebRequest :.たびにウェブの新しいインスタンスを作成するための要求

 

5.5プールされた:.使用「プーリング」モード管理コンポーネントは、この方法は、関連するプロパティPooledWithSizeプールを設けて使用することができます

おすすめ

転載: www.cnblogs.com/zhaoshujie/p/11543421.html