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プールを設けて使用することができます