シナリオ:
私は現在、3 つの類似した Web サービスを 1 つの使用可能なクラスに抽象化するレイヤーを作成しています。各 Web サービスは、共通性を共有する一連のオブジェクトを公開します。共通性を利用する一連の中間オブジェクトを作成しました。ただし、レイヤーでは、Web サービス オブジェクトとオブジェクトの間で変換する必要があります。
次のように Web サービスを呼び出す前に、実行時にリフレクションを使用して適切な型を作成しました。
public static object[] CreateProperties(Type type, IProperty[] properties)
{
//Empty so return null
if (properties==null || properties.Length == 0)
return null;
//Check the type is allowed
CheckPropertyTypes("CreateProperties(Type,IProperty[])",type);
//Convert the array of intermediary IProperty objects into
// the passed service type e.g. Service1.Property
object[] result = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
IProperty fromProp = properties[i];
object toProp = ReflectionUtility.CreateInstance(type, null);
ServiceUtils.CopyProperties(fromProp, toProp);
result[i] = toProp;
}
return result;
}
私のサービス実装の1つからの私の呼び出しコードは次のとおりです。
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
したがって、各サービスは、独自の IProperty インターフェイスの実装の背後に隠している、異なる「Property」オブジェクトを公開します。
リフレクション コードは単体テストで機能し、適切な型の要素を持つオブジェクトの配列を生成します。しかし、呼び出しコードは失敗します:
System.InvalidCastException: タイプ 'System.Object[]' のオブジェクトをタイプ 'MyProject.Property[] にキャストできません
何か案は?
含まれているオブジェクトが変換可能である限り、オブジェクトからのキャストは機能するという印象を受けましたか?