2025-05-24

綜合研究使用瞭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<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使用配置文件的方法,略顯麻煩,不過可以把這部分提取出來,變成和第一、二種一樣的方式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *