DCIコンテキストのほとんどの例は、コマンドパターンとして実装されています。ただし、依存性注入を使用する場合は、コンストラクターに依存性を注入し、パラメーターを実行メソッドに送信すると便利です。コマンドパターンクラスを比較します。
public class SomeContext
{
private readonly SomeRole _someRole;
private readonly IRepository<User> _userRepository;
// Everything goes into the constructor for a true encapsuled command.
public SomeContext(SomeRole someRole, IRepository<User> userRepository)
{
_someRole = someRole;
_userRepository = userRepository;
}
public void Execute()
{
_someRole.DoStuff(_userRepository);
}
}
依存関係が注入されたクラスの場合:
public class SomeContext
{
private readonly IRepository<User> _userRepository;
// Only what can be injected using the DI provider.
public SomeContext(IRepository<User> userRepository)
{
_userRepository = userRepository;
}
// Parameters from the executing method
public void Execute(SomeRole someRole)
{
someRole.DoStuff(_userRepository);
}
}
最後のものは少し良いように見えますが、私はそれがこのように実装されているのを見たことがないので、考慮すべきことがあるかどうか興味があります。