2010-07-09 114 views
0

我想創建一個框架,該框架應該可以通過App.config進行配置。 就像我們的WCF主機如何通過配置配置文件創建對象(如WCF)

要清楚

我需要只寫3行與下面的配置

Type serviceType = typeof(DerivativesCalculatorServiceType); 
ServiceHost host = new ServiceHost(serviceType)) 
host.Open(); 

WCF配置

<configuration> 
    <system.serviceModel> 
     <services> 
     <service name="DerivativesCalculator.DerivativesCalculatorServiceType" 
        behaviorConfiguration="DerivativesCalculatorService"> 

      <endpoint address="Calculator" 
         binding="basicHttpBinding" 
         contract="DerivativesCalculator.IDerivativesCalculator"/> 
     </service> 
     </services> 
     <behaviors> 
     <serviceBehaviors> 
      <behavior name="DerivativesCalculatorService"> 
       <serviceMetadata httpGetEnabled="true" /> 
      </behavior> 
     </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 

託管服務我想知道綁定對象,端點對象,Contract是如何通過解析xml而在內部創建的,因爲xml是字符串,相應的怎麼樣對象或內部創建的類。

例如AddServiceEndpoint

AddServiceEndpoint(typeof(IDerivativesCalculator), basicHttpBindingObject, Address); 

如何DerivativesCalculator.IDerivativesCalculator從轉換爲IDerivativesCalculator

+0

是的,基本上WCF運行時會加載和解釋配置併爲您調用這些方法 - 不涉及黑魔法,只是一些代碼。你可以使用'Activator.CreateInstance'(基礎.NET庫的一部分:http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx) – 2010-07-09 08:04:10

+0

感謝你的一行解釋每一件事 – Somaraj 2010-07-13 04:24:19

回答

0

DerivativesCalculator.IDerivativesCalculator在XML中指定了定義合同的接口的名稱。 IDerivativesCalculator是實際的接口,它在Derivatives命名空間中定義。

Reflection用於在程序集中查找類型。 Assembly.GetType(String)方法是反射方法的一個例子。通過將DerivativesCalculator.IDerivativesCalculator名稱傳遞給該方法,可以使用此方法返回IDerivativesCalculator類型。

反射也可用於create instances的一種類型,同樣基於類型的名稱。這是您可以如何基於配置文件填充對象。