【发布时间】:2011-09-01 15:28:47
【问题描述】:
对不起,标题不清楚,我真的不知道该怎么说。我将用代码进行演示。
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();
}
}
我有很多方法是相同的,除了计算器对象的类型参数不同。
问题是,因为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 的类型信息,我无法创建 private static Calculator<TInstrument, TResult> _calculator 成员,而 WCF 无法做到这一点。
我能想到的唯一方法就是拥有
private static dynamic _calculator;
还有其他方法吗?如果可能,我宁愿避免使用动态,我不确定性能影响可能是什么。
【问题讨论】:
-
为什么不在客户端使用对象并拆箱数据,可能使用类型安全的通用包装器?