我正在尝试集成MvcMailer进入 ASP.NET MVC 4 应用程序。
我从 NuGet 安装了该包,并使用 Scaffold
命令生成了一个邮件程序,没有出现任何问题。我最终得到了一个包含 UserMailer
和 IUserMailer
的新文件夹 Mailers,以及 Views
下的一个 UserMailer
文件夹。
现在,我想在每次用户注册时发送一封电子邮件。所有与用户相关的操作均由我的 AccountController
处理,因此我只是想更改其构造函数以接受 IUserMailer
的实例。
然而,温莎城堡却提示道。它表示无法创建组件 AccountController,因为它依赖于等待满足的 IUserMailer。
我尝试过注册它
container.Register(Classes.FromThisAssembly()
.BasedOn<IUserMailer>()
.LifestyleTransient());
但 Windsor 仍然抛出相同的异常。
我什至尝试过使用
注册它container.Register(Component.For<IUserMailer>());
这会将错误更改为“IUserMailer 是抽象的。因此,不可能将其实例化为服务 IUserMailer 的实现。您是否忘记代理它?”
我不知道如何让这个东西发挥作用。有人可以帮忙吗?
This comment说 MvcMailer 与 CaSTLe Windsor 不兼容,这会有点悲伤。如果是这样的话,有没有办法解决这个问题?
这很可能是一个愚蠢的问题,我几乎没有温莎的经验。
最佳答案
我刚刚让 MVCMailer 与温莎城堡 3.2 一起使用
对于我的解决方案,我有一个单独的 IOC 项目,其中包含我的所有安装程序。在我的核心项目(在所有项目之间共享)中,我创建了一个空接口(interface) IMailer
public interface IMailer
{
}
然后在你搭建一个邮件程序之后继承IMailer
public interface IAccountMailer : IMailer
{
...
}
这应该允许您像这样在温莎城堡一般注册所有邮件。
container.Register(
Classes.FromAssemblyNamed("MyDllName")
.BasedOn<IMailer>().WithService.FromInterface()
.LifestylePerWebRequest()
);
然后你可以在 Controller 中执行类似的操作
public class EmailController : ApiController
{
private readonly IAccountMailer accountMailer;
public EmailController(IAccountMailer accountMailer)
{
this.accountMailer = accountMailer;
}
}
只要您的温莎城堡创建了 MVC 和 API Controller ,它就应该能够创建您的邮件程序。
关于c# - 无法向 CaSTLe Windsor 注册 MvcMailer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12747292/