c# - 无法向 CaSTLe Windsor 注册 MvcMailer

标签 c# asp.net-mvc-4 castle-windsor mvcmailer

我正在尝试集成MvcMailer进入 ASP.NET MVC 4 应用程序。

我从 NuGet 安装了该包,并使用 Scaffold 命令生成了一个邮件程序,没有出现任何问题。我最终得到了一个包含 UserMailerIUserMailer 的新文件夹 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/

相关文章:

c# - 如何动态连接 C# 中的 T-SQL 表,来自 ListView 的 COLUMNS

c# - 如何以编程方式检索 Excel 工作表中的页数?

javascript - 在 MVC 4 上使用 FineUploader 手动触发上传

.net - 将 Pooled Lifestyle 与 Windsor 中的 PerWebRequest Lifestyle 集成

c# - 带有(一点点)Unity 3D 的 iOS 项目?

c# - AWS 日志记录不工作

.net - 向 Google 联系人请求添加授权

.net - 回收工作进程后从 session cookie 中读取的 ClaimsIdentity 类型不正确

.net - 在远程处理场景中使用 IOC

c# - 带有 CaSTLe Windsor 的 Nlog 3.1 不记录