我爲不清楚的標題道歉,我真的不知道該怎麼說。我將用代碼演示。創建一個沒有在類上指定類型參數的泛型類型成員變量
public class CalculationService
{
private static Calculator<StaticInstrument, StaticResult> _staticCalculator;
private static Calculator<DynamicInstrument, DynamicResult> _dynamicCalculator;
private static readonly object IsInitializedLock = new object();
public byte[] ProcessStatic()
{
lock (IsInitializedLock)
{
_staticCalculator = new Calculator<StaticInstrument, StaticResult>();
}
return _staticCalculator.Calculate();
}
public byte[] ProcessDynamic()
{
lock (IsInitializedLock)
{
_dynamicCalculator = new Calculator<DynamicInstrument, DynamicResult>();
}
return _dynamicCalculator.Calculate();
}
}
我有很多方法是相同的,除了Calculator對象的類型參數不同的事實。
問題是,因爲CalculationService
是WCF服務,所以不能有有任何類型的參數。由於這個原因,我不能簡單地創建一個靜態成員Calculator<TInstrument, TResult>
,因爲我不能在CalculationService
上輸入參數。
我理想的解決辦法是這樣的:
public class CalculationService
{
private static Calculator<TInstrument, TResult> _calculator;
private static readonly object IsInitializedLock = new object();
public byte[] Process<TInstrument, TResult>()
{
lock (IsInitializedLock)
{
_calculator = new Calculator<TInstrument, TResult>();
}
return _calculator.Calculate();
}
public byte[] ProcessStatic()
{
return Process<StaticInstrument, StaticResult>();
}
public byte[] ProcessDynamic()
{
return Process<DynamicInstrument, DynamicResult>();
}
}
但是,如果沒有指定的CalculationService
類型的信息,這是我不能做的WCF我不能創建private static Calculator<TInstrument, TResult> _calculator
成員。
我能想到的唯一辦法做到這一點是有
private static dynamic _calculator;
有沒有其他辦法?如果可能的話,我寧願避免使用動態,我不確定會有什麼性能影響。
你可以使用接口嗎? – skaz
看看這個了 http:// stackoverflow。com/questions/509803/naming-generic-datacontracts-in-wcf – Sam
爲什麼不只在客戶端使用object和unbox數據,可能會使用一個工作類型安全的通用包裝? – Kolja