問題:ユーザーがドメイン内のあるエンティティを操作している。最後のものは、ユーザーe-mail notifications
が指定された時間まで繰り返し受信するように(smtpサーバーを使用して)ステータスを変更します。
だから私はどういうわけかイベントを発生させる必要があります。
それを行うための代替方法は何ですか?フレームワークにはイベントがないことを私は知っていますASP.NET MVC
。
ありがとう!
問題:ユーザーがドメイン内のあるエンティティを操作している。最後のものは、ユーザーe-mail notifications
が指定された時間まで繰り返し受信するように(smtpサーバーを使用して)ステータスを変更します。
だから私はどういうわけかイベントを発生させる必要があります。
それを行うための代替方法は何ですか?フレームワークにはイベントがないことを私は知っていますASP.NET MVC
。
ありがとう!
インプロセスドメインイベントのサポートが組み込まれている制御の反転コンテナを使用できます。
購読する
購読は簡単です。単純に、任意のクラスにIHandlerOfを実装させます。
[Component]
public class ReplyEmailNotification : IHandlerOf<ReplyPosted>
{
ISmtpClient _client;
IUserQueries _userQueries;
public ReplyEmailNotification(ISmtpClient client, IUserQueries userQueries)
{
_client = client;
_userQueries = userQueries;
}
public void Invoke(ReplyPosted e)
{
var user = _userQueries.Get(e.PosterId);
_client.Send(new MailMessage(user.Email, "bla bla"));
}
}
発送
ドメインイベントは、DomainEventクラスを使用してディスパッチされます。実際のドメインイベントは任意のクラスにすることができ、制限はありません。ただし、それらをDTOとして扱うことをお勧めします。
public class UserCreated
{
public UserCreated(string id, string displayName)
{
}
}
public class UserService
{
public void Create(string displayName)
{
//create user
// [...]
// fire the event.
DomainEvent.Publish(new UserCreated(user.Id, user.DisplayName));
}
}
コードは私の記事からのものです:http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container
ASP.NET MVC3のインストール:
install-package griffin.container.mvc3