IoC,在构造函数中使用参数混合注入?

时间:2008-11-17 06:28:19

标签: inversion-of-control

我是Inversion of Control(IoC)的新手,所以我想知道要处理的最佳策略 我希望传递数据结构/参数以及注入的情况 对象变成了一个类。

一个简单的例子:

public class EmailSender
{

    public EmailSender(string toEmail, string Subject, String body,
                       ILogger emailLogger)
    {.....}
}

这里最好的策略是什么?我想直接注射是不可能的?

我想我需要将所有字符串参数作为setter来代替 只是在构造函数中有Ilogger,或者反过来?

或者我错了?

P.S。我知道上面的示例很糟糕,toEmailbody应该在一个单独的方法调用中传递,但它只是为了做一个例子。

1 个答案:

答案 0 :(得分:3)

不,您应该能够在构造函数调用中指定字符串。不可否认,我通常希望那些作为方法参数传递的更“瞬态”值:

public class EmailSender
{
    private readonly ILogger emailLogger;

    public EmailSender(ILogger emailLogger)
    {
         this.emailLogger = emailLogger;
    }

    public void SendEmail(string toEmail, string subject, string body)
    {
         // ...
    }
}

这样可以使用相同的EmailSender发送许多电子邮件 - 电子邮件本身的详细信息“流过”发件人而不是其中的一部分。

编辑:鉴于对该问题的编辑,还不完全清楚剩下的是什么。如果您真的在询问如何将字符串指定为构造函数参数,那将取决于您正在使用的IoC框架。如果您可以指定框架,我们可能会为您提供适当的语法。