2

クラスのインスタンスしか作成できないことはわかっていますが、メソッドのインターフェイスを設定し、Deserialize() メソッド内でインスタンスを作成したいだけです。

 public T Deserialize(string contents)
        {
            Type type = typeof(T);

            var obj = Activator.CreateInstance(type);

このように使用したいと思います:

var customSerializer = new CustomSerializer<IPerson>();
IPerson person = customSerializer.Deserialize(contents);

どのオブジェクトを作成するかは問題ではなく、T インターフェースが提供する基本的なプロパティが必要なだけです。

どうすればこれを達成できますか?

ありがとう、

4

3 に答える 3

2

私があなたの質問を正しく理解していれば、あなたは tags を指定"testing"したので、特定のインターフェース用に"unit"を作成できる Mocking Framework を探していると思います。mock

使用するフレームワークはたくさんありますが、これは決定を下すのに役立つ素晴らしい投稿です。

どの C# モッキング フレームワークを使用しますか?

単体テスト ソリューションを探していない場合は、それらのタグを削除してください。

于 2012-12-09T20:42:53.483 に答える
1

これは、 impromptu インターフェイスライブラリを使用して実現できます。

動的オブジェクトを作成し、 を使用ActLike<IMyInterface>()して、 を実装するクラスのインスタンスであるかのように動作させますIMyInterface

于 2012-12-09T21:03:05.710 に答える
0

単体テスト用のモック オブジェクトの作成は、他の回答で既にカバーされています。これは「実際の型を知らずにインターフェイスにデシリアライズする」についてです。

一般的なケースでは、インターフェイスへのデシリアライズはできません。シリアル化されたデータとインターフェイスのプロパティの値の間のマッピングはありません。

次のサンプルは、いくつかの問題を示しています。

interface IPerson 
{
  string Name {get;}
}

class Person: IPerson
{
   string realName;
   public string Name 
   {
     get {return realName;} 
     set {realName=value;}
   }
}

class FakePerson : IPerson
{
   public string Name {get {return "Bob";} }
}

シリアル化した場合、 と の間にPerson明確なマッピングがないため、 person 以外は何も読み取ることができません。シリアル化されたものがまったくないため、さらに悪いことです。realNameNameFakePersonName

于 2012-12-09T20:56:37.287 に答える