<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      微軟企業庫Unity學習筆記(一)

      本文主要介紹

      關于Unity container配置,注冊映射關系、類型,單實例、已存在對象和指出一些container的基本配置,這只是我關于Unity的學習心得和筆記,希望能夠大家多交流相互學習到更多知識,謝謝大家的支持。

      我們可以通過以下兩種方法給Unity container中創建映射:

      • RegisterType:這個方法可以往container中注冊一種類型或映射關系,當我們需要調用該類型的實例時,container會自動實例化該類型的對象,無需通過new someName方法實例化對象(例如:使用ResolveResolveAll方法獲取注冊類型的實例),當沒有指定實例化對象的生命周期,將使用默認的TransientLifetimeManager(每次調用ResolveResolveAll方法時都會實例化一個新的對象)。
      • RegisterInstance:這個方法是往container中注冊一個已存在實例,通過ResolveResolveAll方法獲取該類型的實例,默認使用ContainerControlledLifetimeManager管理對象生命周期,而且container中會保持對象的引用(簡而言之每次調用ResolveResolveAll方法都會調用同一個對象的引用)。

      1.1         注冊一個接口或類的映射到具體類型:

      使用Register方法可以往容器中注冊一種類型或映射關系

      • l         往容器中注冊一種類型RegisterType<Type>
      • l         往容器中注冊一種映射關系RegisterType< RegisteredType, TargetType >

      調用RegisterType<RegisteredType, TargetType>()方法可以往容器中注冊一種映射關系,RegisteredType是一個接口或類,而TargetType必需實現該接口或繼承該類。

      1.2         注冊一個單例類或單例類型實例:

      涉及到對象的生命周期(Lifetime Managers):

      • l         默認的情況下使用TransientLifetimeManager管理對象的生命周期,以下兩種方法效果一樣:
      container.RegisterType<IMyService, CustomerService>();

      container.RegisterType
      <IMyService, CustomerService>(new TransientLifetimeManager());
      • l         使用ContainerControlledLifetimeManager創建單例實例
      container.RegisterType<IMyService, CustomerService>(new ContainerControlledLifetimeManager());
      • l         使用ExternallyControlledLifetimeManager只可以保持對象的弱引用
      container.RegisterType<IMyService, CustomerService>(new ExternallyControlledLifetimeManager

      關于強引用和弱引用:

      強引用:當一個根指向一個對象時,該對象不可能被執行垃圾收集,因為程序代碼還在訪問該對象。

      弱引用:允許垃圾收集器收集對象,同時允許應用程序訪問該對象,結果是執行哪個要取決于時間。

      • l         使用PerThreadLifetimeManager在同一個線程返回同一個對象實例,不同線程對象實例不相同 

       

      container.RegisterType<IMyService, CustomerService>(new PerThreadLifetimeManager());

       

      在使用RegisterType注冊類型或映射,如果對對象生命周期進行,將使用默認的TransientLifetimeManager,它不會在container中保存對象的引用,簡而言之每當調用ResolveResolveAll方法時都會實例化一個新的對象。當我們想在container中保存對象的引用的時我們可以使用ContainerControlledLifetimeManager管理對象的生命周期,簡而言之每次調用ResolveResolveAll方法都會調用同一個對象的引用。

      1.3         注冊一個存在對象作為單件實例:

      注冊一個存在的對象我們使用的是RegisterInstance,它默認使用ContainerControlledLifetimeManager管理對象的生命周期,回顧以下

      RegisterType和RegisterInstance區別:

      Method

      Default Lifetime Managers

      Same Lifetime Managers

      RegisterType

      TransientLifetimeManager

      ContainerControlledLifetimeManager

      RegisterInstance

      ContainerControlledLifetimeManager

      ContainerControlledLifetimeManager

      RegisterTypeRegisterInstance都使用ContainerControlledLifetimeManager時的區別:

      MSDN:If you used the RegisterType method to register a type, Unity creates a new instance of the registered type during the first call to the Resolve or ResolveAll method or when the dependency mechanism injects instances into other classes. Subsequent requests return the same instance.

      If you used the RegisterInstance method to register an existing object, Unity returns this instance every time you call the Resolve or ResolveAll method or when the dependency mechanism injects instances into other classes.

      翻譯:如果使用RegisterType方法注冊一種類型,當第一次調用ResolveResolveAll 方法或依賴機制注入一個實例到其他類時,Unity會實例化該注冊類型,之后的調用都返回相同實例。

      如果使用RegisterInstance方法注冊一個存在對象,當我們調用ResolveResolveAll方法或賴機制注入一個實例到其他類時,Unity每次都返回該對象實例。

      1.4         使用container的fluent interface屬性:

      這意味著你可以在一條語句中使用方法鏈

      IUnityContainer myContainer = new UnityContainer()
      .RegisterType
      <IMyService, DataService>()
      .RegisterType
      <IMyUtilities, DataConversions>()
      .RegisterInstance
      <IMyService>(myEmailService);

      由于IUnityContainer 接口實現了IDispose接口,所有我們可以使用Using控制container資源釋放

       

      ////IUnityContainer實現接口IDisposable,所以可以使用

      ////using有效釋放對象占用的系統資源。

      using (IUnityContainer container = new UnityContainer())

      {

      ////實現

      }
      posted @ 2011-02-12 14:22  JK_Rush  閱讀(7987)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 国产亚洲精品久久久久蜜臀| 中文字幕精品亚洲无线码二区 | 成人免费无遮挡无码黄漫视频| 日韩乱码视频一区二区三区| 99RE8这里有精品热视频| 人妻少妇偷人精品免费看| 亚洲精品一品二品av| 99久久久国产精品消防器材| 亚洲中文字幕无码中文字| 麻豆国产成人AV在线播放| 久久一级黄色大片免费观看 | 亚洲第一二三区日韩国产| 阿巴嘎旗| 大陆精大陆国产国语精品| 亚洲精品入口一区二区乱| 91中文字幕在线一区| 少妇被爽到高潮喷水久久欧美精品 | 日韩av一区二区三区不卡| 色综合久久精品亚洲国产| 国产一区二区三区我不卡| 综合色一色综合久久网| 伊人蕉久影院| 老司机免费的精品视频| 久久无码中文字幕免费影院蜜桃 | 亚洲欧美在线综合一区二区三区| 亚洲国产日韩a在线播放| 亚洲无线码中文字幕在线| 国产精品国产主播在线观看| 干老熟女干老穴干老女人| 亚洲精品网站在线观看不卡无广告| 久久久久久久久毛片精品| 舒城县| 国产偷人妻精品一区二区在线 | 紫阳县| 精品午夜福利短视频一区| 国产成人精品久久综合| 国产亚洲999精品AA片在线爽| 伊人久久大香线蕉综合网| 国产伦码精品一区二区| 国产丝袜视频一区二区三区| 亚洲人成网站在线无码|