2

最近、AutoPoco for c#を試しました。これは、POCOを自動的に作成し、テストデータを入力するためのツールです。しかし、私は今立ち往生しています。私にはPOCOという人がいて、各人には次のような電子メールアドレスのリストがあります。

class Person
{
    String Name;
    int Age;
    List<string> EmailAddresses;
}

今、私はそれをAutoPocoで埋めようとします:

                x.Include<Person>()
                   .Setup(p => p.Name).Use<FirstNameSource>();
                   .Setup(p => p.EmailAddresses).Use<EmailAddressSource>()
                ;

ただし、2行目は、リストではなく文字列プロパティを想定しているため、構文エラーで失敗します。AutoPocoにはEnumerableSourceがあり、これはおそらく私が必要としているものですが、そのコードサンプルは見つかりませんでした。文字列リストにAutoPocoを入力する方法についてのヒントを教えてください。

4

1 に答える 1

1

これが実際の例です。あなたが投稿したコードスニペットはコンパイルされないので、それが最初の問題でした。

コレクションの要素を生成するためのよりエレガントな方法を見つけることができませんでした。

public class Person
{
    public String Name;
    public int Age;
    public List<string> EmailAddresses = new List<string>();

    public void Add(string email)
    {
        EmailAddresses.Add(email);
    }
}

[Test]
public void Noodling()
{
        IGenerationSessionFactory factory = AutoPocoContainer.Configure(x =>
    {
        x.Conventions(c => { 
            c.UseDefaultConventions();
        });
        x.AddFromAssemblyContainingType<LegacyUserProfileDto>();

        x.Include<Person>()
            .Setup(p => p.Name).Use<FirstNameSource>()
            .Invoke(z => z.Add(Use.Source<string, EmailAddressSource>()));
        //.Invoke(z => z.EmailAddresses.Add(Use.Source<string, EmailAddressSource>()));//Fails
    });
    IGenerationSession session = factory.CreateSession();

    Person person = session.Single<Person>().Get();
    Console.WriteLine(person.Age + " " + person.Name);
    foreach (string emailAddress in person.EmailAddresses)
    {
        Console.WriteLine(emailAddress);    
    }
}
于 2014-10-07T19:33:57.787 に答える