我有一個C#項目用作Visual Studio擴展的一部分。在C#中爲多個版本的.NET更改對象屬性
爲了支持早期版本的VS,項目設置爲Target framework
.NET Framework 3.5。
該項目參考System.ServiceModel
。
根據運行的是哪個版本的Visual Studio,將使用不同版本的System.ServiceModel
。無論項目目標框架如何,VS2008都將使用.NET 3.5版本的DLL,而VS2012將在運行時使用.NET 4.5版本。
我的問題是一個屬性被添加到.NET 4中的HttpTransportBindingElement,被稱爲DecompressionEnabled。因爲我的目標是.NET 3.5,所以無法編譯對此屬性的更改;但是,我確實需要改變它的價值。
圍繞我使用在運行時更改屬性的工作,是利用反射:
public static void DisableDecompression(this HttpTransportBindingElement bindingElement)
{
var prop = bindingElement.GetType()
.GetProperty("DecompressionEnabled",
BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(bindingElement, false, null);
}
}
解決方案的工作,但我不知道是否有處理這個更好的設計模式,不需要反思。
您是否考慮將此功能移至擴展方法?這將簡化訪問並顯着減少代碼氣味。 –
是的,它已經是一個擴展方法(請參閱方法定義)。 –
哎呀......我的意思是:「你是否考慮過改變它,以便該方法將屬性名稱和值作爲參數,以便您不需要8個不同的擴展名?」 –