Dependency injection DI在哪里适合CQS?

Dependency injection DI在哪里适合CQS?,dependency-injection,command,Dependency Injection,Command,每当命令需要依赖项时,您必须求助于属性注入吗 假设我有以下命令 public class AddReviewCommand { private ISession _session; private readonly string _reviewSummary; public AddReviewCommand(string reviewSummary) { _reviewSummary = reviewSummary; } pub

每当命令需要依赖项时,您必须求助于属性注入吗

假设我有以下命令

public class AddReviewCommand
{
    private ISession _session;
    private readonly string _reviewSummary;

    public AddReviewCommand(string reviewSummary)
    {
        _reviewSummary = reviewSummary;
    }

    public void Execute()
    {
        var review = new Review
            {
                AddedBy = Environment.Username,
                AddedDateTime = DateTime.Now,
                ReviewSummary = _reviewSummary
            };

            _session.Save(review);
    }
}

注入
ISession
的唯一方法是通过属性注入吗?

属性注入意味着依赖项是可选的,很少是正确的不变量构造函数注入是一种更合适的模式:

public class AddReviewCommand
{
    private ISession _session;
    private readonly string _reviewSummary;

    public AddReviewCommand(string reviewSummary, ISession session)
    {
        _reviewSummary = reviewSummary;
        _session = session;
    }

    public void Execute()
    {
        var review = new Review
        {
            AddedBy = Environment.Username,
            AddedDateTime = DateTime.Now,
            ReviewSummary = _reviewSummary
        };

        _session.Save(review);
    }
}

谢谢你的回复。我问的原因是我有一个表单可以执行几个命令中的一个。我无法想象将每个命令注入到我的服务(或任何)构造函数中。为什么不呢?有几个不会是问题。如果你有太多,这不是服务本身违反SRP的信号吗?是的,你完全正确。我没想到。谢谢你的评论。