2

MvcMailerを ASP.NET MVC 4 アプリに統合しようとしています。

NuGet からパッケージをインストールし、Scaffold問題なくコマンドでメーラーを生成しました。と を含む新しいフォルダー MailersUserMailerIUserMailer、 のUserMailer下のフォルダーになりましたViews

ここで、ユーザーが登録するたびにメールを送信したいと考えています。ユーザーに関するすべての操作は my によって処理されるためAccountController、そのコンストラクターを変更して のインスタンスを受け入れるようにしようと考えましたIUserMailer

しかし、キャッスル ウィンザーは不平を言います。それは、満たされるのを待っている IUserMailer に依存しているため、コンポーネント AccountController を作成できないことを示しています。

で登録してみました

container.Register(Classes.FromThisAssembly()
                .BasedOn<IUserMailer>()
                .LifestyleTransient());

ただし、Windsor は引き続き同じ例外をスローします。

私もそれを登録しようとしました

container.Register(Component.For<IUserMailer>());

エラーを「IUserMailerは抽象的です。そのため、サービスIUserMailerの実装としてインスタンス化することはできません。プロキシするのを忘れましたか?」

このことを機能させる方法がわかりません。誰でも助けることができますか?

このコメントは、MvcMailer が Castle Windsor と互換性がないことを示しています。これは少し悲しいことです。その場合、それを回避する方法はありますか?

これはばかげた質問かもしれませんが、私はウィンザーの経験がほとんどありません。

4

2 に答える 2

1

これまで:

container.Register(Component.For<IUserMailer>().ImplementedBy<UserMailer>().Named("MailerService").LifeStyle.Transient);

...私にとってはうまくいっていますが、ときどき null 参照例外が発生するという報告があります (WhateverMailer が Windsor コンテナーによってインスタンス化されていないかのように)。私はまだこれに遭遇していませんが、遭遇した場合は、コンテナの良さから離れて、鼻をふさぎ、適切なコントローラーでメーラーを新しくする必要があります. 上記のコントローラーをテストしている場合は、リンクされた参照から:

次のように、テストのセットアップでコントローラーのメーラーを手動で再割り当てします。

Target = new Controller(...) { MailService = MailServiceMock.Object };

@Neilにも良い解決策があるように見えますが。

于 2013-06-27T07:15:45.550 に答える