现在的位置: 首页 > 综合 > 正文

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

2012年09月05日 ⁄ 综合 ⁄ 共 2338字 ⁄ 字号 评论关闭

  综合研究使用了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使用配置文件的方法,略显麻烦,不过可以把这部分提取出来,变成和第一、二种一样的方式。

抱歉!评论已关闭.