Mvc.Unity4 も使用する MVC アプリケーション内で Postal を使用しようとすると、奇妙な問題が発生します。
へのアクセスがないために問題が発生したと思いますHttpContext
。
Postal を使用して、コントローラーの 1 つからメールを送信しようとしています。
dynamic e = new Email("AccountActivation");
e.To = "name@email.com"
e.Send();
電子メールを送信しようとすると、 内で次の例外が発生しますUnity.Mvc4.UnityDependencyResolver
:
[NullReferenceException: Object reference not set to an instance of an object.]
Unity.Mvc4.UnityDependencyResolver.get_ChildContainer() +57
Unity.Mvc4.UnityDependencyResolver.GetService(Type serviceType) +241
System.Web.Mvc.DefaultViewPageActivator.Create(ControllerContext controllerContext, Type type) +87
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +216
Postal.EmailViewRenderer.RenderView(IView view, ViewDataDictionary viewData, ControllerContext controllerContext, ImageEmbedder imageEmbedder) +182
Postal.EmailViewRenderer.Render(Email email, String viewName) +204
Postal.EmailService.CreateMailMessage(Email email) +72
Postal.EmailService.Send(Email email) +65
これは別の開発者によって追加されたため、Mvc.Unity4 にはあまり詳しくありません。
ストローをつかんで、Application_Start 内に正しい Postal タイプを登録しようとしました。Unity コンテナの初期化は次の場所で行われていBootstrapper.cs
ます:
container.RegisterType<UsersController>(new InjectionConstructor());
container.RegisterInstance<IEmailService>(new EmailService());
私のコントローラー内には、次のものがあります。
private IEmailService _emailService;
public UsersController()
{
_emailService = new Postal.EmailService();
}
public UsersController(Postal.EmailService emailService)
{
_emailService = emailService;
}
[HttpPost]
public async Task<ActionResult> SendEmail(EmailViewModel viewModel)
{
dynamic e = new Email("AccountActivation");
e.ViewData.Add("To", "name@email.com");
e.ViewData.Add("From", "no-reply@email.com");
_emailService.Send(e);
More code...
}