最近项目中用到Castle ,用的第一感觉就是和spring 及象。。
新建c#工程
添加对Dll的引用
新建 接口
新建实现类
调用 只要
Interface1 iface = (Interface1) MindDumpContainer.GetInstance().GetObject(typeof(Interface1));
iface.add();
就可以了 。。
和spring 太象了 。。
官方网站:
http://www.castleproject.org/index.php/Main_Page
新建c#工程
添加对Dll的引用
Castle.DynamicProxy.dll
Castle.MicroKernel.dll
Castle.Model.dll
Castle.Windsor.dll
新建 接口
namespace
first.Castle
{
public interface Interface1
{
void add();
void del();
}
}
{
public interface Interface1
{
void add();
void del();
}
}
新建实现类
namespace
first.Castle
{
public class ClassTest:Interface1
{
public void add()
{
System.Diagnostics.Debug.Assert(false,"add");
}
public void del()
{
System.Diagnostics.Debug.Assert(false,"del");
}
}
}
{
public class ClassTest:Interface1
{
public void add()
{
System.Diagnostics.Debug.Assert(false,"add");
}
public void del()
{
System.Diagnostics.Debug.Assert(false,"del");
}
}
}
读取配置
using
System;
using System.Diagnostics;
using Castle.MicroKernel;
using Castle.Windsor;
//http://www.blogjava.net/wujun
namespace first.Castle
{
public class MindDumpContainer
{
private static MindDumpContainer _singleMindDupContainer = null;
private static WindsorContainer _windsorContainer = null;
private MindDumpContainer()
{
_windsorContainer =
new WindsorContainer("配置文件路径 windsor.config", AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
if (_windsorContainer == null)
{
throw new Exception("Failed initialize WindsorContainer.");
}
}
//单态
public static MindDumpContainer GetInstance()
{
if (_singleMindDupContainer == null)
{
_singleMindDupContainer = new MindDumpContainer();
}
return _singleMindDupContainer;
}
/**//// <summary>
/// Get contained object by its name
/// </summary>
/// <param name="key">key of the object when registered</param>
/// <returns>the object</returns>
public object GetObject(string key)
{
Debug.Assert(_windsorContainer != null);
try
{
return _windsorContainer[key];
}
catch (ComponentNotFoundException ex)
{
throw new Exception(string.Format("No componet with the passed key: {0}", key), ex);
}
}
public object GetObject(Type type)
{
Debug.Assert(_windsorContainer != null);
try
{
return _windsorContainer[type];
}
catch (ComponentNotFoundException ex)
{
throw new Exception(
"error");
}
}
}
}
using System.Diagnostics;
using Castle.MicroKernel;
using Castle.Windsor;
//http://www.blogjava.net/wujun
namespace first.Castle
{
public class MindDumpContainer
{
private static MindDumpContainer _singleMindDupContainer = null;
private static WindsorContainer _windsorContainer = null;
private MindDumpContainer()
{
_windsorContainer =
new WindsorContainer("配置文件路径 windsor.config", AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
if (_windsorContainer == null)
{
throw new Exception("Failed initialize WindsorContainer.");
}
}
//单态
public static MindDumpContainer GetInstance()
{
if (_singleMindDupContainer == null)
{
_singleMindDupContainer = new MindDumpContainer();
}
return _singleMindDupContainer;
}
/**//// <summary>
/// Get contained object by its name
/// </summary>
/// <param name="key">key of the object when registered</param>
/// <returns>the object</returns>
public object GetObject(string key)
{
Debug.Assert(_windsorContainer != null);
try
{
return _windsorContainer[key];
}
catch (ComponentNotFoundException ex)
{
throw new Exception(string.Format("No componet with the passed key: {0}", key), ex);
}
}
public object GetObject(Type type)
{
Debug.Assert(_windsorContainer != null);
try
{
return _windsorContainer[type];
}
catch (ComponentNotFoundException ex)
{
throw new Exception(
"error");
}
}
}
}
配置文件
<?
xml version="1.0" encoding="utf-8"
?>
<!-- This configuration file contains castle windsor config file, including facilities and components -->
< configuration >
< configSections >
< section name ="log4net" type ="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</ configSections >
//http://www.blogjava.net/wujun
< components >
//service是配置接口 逗号后面是命名空间
//type 是具体的实现 逗号后面是命名空间
< component id ="Classtest" service ="first.Castle.Interface1,first.Castle" type ="first.Castle.ClassTest,first.Castle" />
</ components >
</ configuration >
<!-- This configuration file contains castle windsor config file, including facilities and components -->
< configuration >
< configSections >
< section name ="log4net" type ="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</ configSections >
//http://www.blogjava.net/wujun
< components >
//service是配置接口 逗号后面是命名空间
//type 是具体的实现 逗号后面是命名空间
< component id ="Classtest" service ="first.Castle.Interface1,first.Castle" type ="first.Castle.ClassTest,first.Castle" />
</ components >
</ configuration >
调用 只要
Interface1 iface = (Interface1) MindDumpContainer.GetInstance().GetObject(typeof(Interface1));
iface.add();
就可以了 。。
和spring 太象了 。。
官方网站:
http://www.castleproject.org/index.php/Main_Page