java spring、.net castle windsor 、unity容器使用方法对比
综合研究使用了java spring\.net castle\unity 进行管理,在使用配置文件的情况下发现还是java spring 和castle windsor 比较简洁,但从服务支持和RoadMap上讲,觉得在.net领域还是Unity胜出,能充分利用.net framework .
我选择Unity的几大理由:
1、持续的RoadMap
2、强大的微软
3、因为基于.net ,更原生态
4、和WCF的集成能力
一、java spring 用法:
import javax.jws.WebService;
import org.springframework.beans.factory.annotation.Autowired;
import capinfo.sior.service.OnlineReportPreRegisterService;;
/**
* @author design-life
*/
@WebService(serviceName = "InfoReportWebService", endpointInterface = "InfoReportWebService", targetNamespace = "http://reportwbs/")
public class GetPreRegisterInfoWebServiceImpl {
@Autowired
OnlineReportPreRegisterService service;
public String GetPreRegisterInfo(String registerCode,String scanCode){
return service.getPreRegisterInfo(registerCode, scanCode);
}
}
注:
OnlineReportPreRegisterService 是定义的一个Interface,通过 @Autowired表示自动装配实例化一个类,具体定义封装在一个xml中,实现类在xml表现为一个bean.
二.net Castle 用法:
namespace TestService.Controller
{
using Castle.Core;
using Castle.DynamicProxy;
[ControllerDetails(Area="TestService")]
public class BulletinInfoController : SmartDispatcherController
{
private readonly IDataQuery query;
private string _title;
public BulletinInfoController(IDataQuery query)
{
this.query = query;
}
public BulletinInfoController() { }
public IList<News> List()
{
IList<News> list;
News news = new News();
list = query.UseCriteriaAPI_Get2pagelistinfo(news);
return list;
}
}
注:在Castle 声名
private readonly IDataQuery query; 但需要构造函数初使化它,在整个Castle中Controller 、Service等均可通过配置文件的方式,让容器管理它们。
三、Unity用法
public static void TestCode2()
{
var fileAdd = "unityApp.config";
var filePath = new ExeConfigurationFileMap { ExeConfigFilename = fileAdd };
try
{
Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(filePath, ConfigurationUserLevel.None);
var unitySection = (UnityConfigurationSection)cfg.GetSection("unityTest");
var container = new UnityContainer().LoadConfiguration(unitySection, "one");
var iAdd = container.Resolve<IAddInfo.IAddInfo>();
Console.WriteLine(iAdd.NotifyMsg());
}
catch (Exception err)
{
throw err;
}
Console.ReadKey();
}
注:黑体字部分是Unity使用配置文件的方法,略显麻烦,不过可以把这部分提取出来,变成和第一、二种一样的方式。