私はLinqをあまり使用したことがなく、IEnumberableクラスも使用していません。以下は、私が問題を抱えていることに関する私のコードと説明です。
public class EmailService : IEmailService
{
#region Constructors
#endregion
#region Properties
[ImportMany]
public IEnumerable<IEmailAddressesProvider> AddressProviders { get; set; }
#endregion
これらは、EmailService クラスで使用する必要がある私のプロパティです。これは、電子メール アドレス プロバイダーのコレクションです。
そこに保存されているものを使用し、基本的に、このコードの次のセクションで他のプロパティを使用したように、ViewModel に接続する必要があります。
IUserInteractionService uiService = AllianceApp.Container.GetExportedValue<IUserInteractionService>();
IEmailSetupProvider provider = new EmailSetupProvider();
EmailView ev = AllianceApp.Container.GetExportedValue<EmailView>();
ev.ViewModel.ProviderName = AddressProviders;
ev.ViewModel.Provider = provider;
ev.ViewModel.Bcc = bccAddress;
ev.ViewModel.Cc = ccAddress;
ev.ViewModel.ToAddress = toAddress;
ev.ViewModel.Body = body;
ev.ViewModel.Subject = subject;
ev.ViewModel.Attachments = attachments;
return uiService.ShowDialog(ev, RegionNames.MainRegion);
}
「アドレスプロバイダーは、このプロパティを作成しようとしている場所です。
IEmailAddressesProvider インターフェイス:
public interface IEmailAddressesProvider
{
string ProviderName { get; }
IEnumerable<EmailAddress> GetEmailUsers();
}
GetEmailUsers メソッド (関連する場合に備えて):
[Export(typeof(IEmailAddressesProvider))]
public class EmailAddressProvider : IEmailAddressesProvider
{
#region Private Properties
private static readonly IEncryptionService encryptionService = AllianceApp.Container.GetExportedValue<IEncryptionService>();
#endregion
public string ProviderName
{
get { return "Alliance Users"; }
}
public IEnumerable<EmailAddress> GetEmailUsers()
{
IUserRepository userRepo = AllianceApp.Container.GetExportedValue<IUserRepository>();
IEnumerable<User> users = userRepo.GetAllUsers().Where(a => a.IsDeleted == false).OrderBy(a => a.UserID).AsEnumerable();
List<EmailAddress> AddressList = new List<EmailAddress>();
foreach (var user in users)
{
if (user.DisplayName != null && user.EmailAddress != null && user.DisplayName != string.Empty && user.EmailAddress != string.Empty)
AddressList.Add(new EmailAddress() { DisplayName = encryptionService.DecryptString(user.DisplayName), Email = encryptionService.DecryptString(user.EmailAddress) });
}
AddressList.OrderBy(u => u.DisplayName);
return AddressList;
}
}
ProviderName 専用のコード (EmailAddressesProvider.cs で使用):
[Export(typeof(IEmailAddressesProvider))]
public class EmailAddressProvider : IEmailAddressesProvider
{
#region Private Properties
private static readonly IEncryptionService encryptionService = AllianceApp.Container.GetExportedValue<IEncryptionService>();
#endregion
public string ProviderName
{
get { return "Alliance Users"; }
}
}
インターフェイスやビューモデルなど、私のコードをもう見る必要がある場合は、お知らせください。どんな助けでも大歓迎です!