java spring、.net castle windsor 、unity容器使用方法对比

2014-11-24 01:08:58 · 作者: · 浏览: 0

综合研究使用了java spring.net castleunity 进行管理,在使用配置文件的情况下发现还是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 List()
{
IList 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();

Console.WriteLine(iAdd.NotifyMsg());
}
catch (Exception err)
{
throw err;
}

Console.ReadKey();
}

注:黑体字部分是Unity使用配置文件的方法,略显麻烦,不过可以把这部分提取出来,变成和第一、二种一样的方式。