尝试将消息与行为分开。创建一个保存操作数据的类,并创建一个包含该操作的业务逻辑的不同类。例如,创建以下命令:
public class RegisterAssetCommand
{
[Required]
public int CaseNumber { get; set; }
[Required]
public User Operator { get; set; }
}
现在定义一个处理业务命令的接口:
public interface ICommandHandler<TCommand>
{
void Handle(TCommand command);
}
您的演示代码现在将如下所示:
var command = new RegisterAssetCommand
{
CaseNumber = 1000,
Operator = GetUserFromPage(),
};
var commandHandler = WindsorContainer
.Resolve<ICommandHandler<RegisterAssetCommand>);
commandHandler.Handle(command);
Note: 如果可能的话,转移获得许可的责任commandHandler
从表示类中取出并将其注入到该类的构造函数中(再次构造函数注入)。
不,您可以创建一个实现ICommandHandler<RegisterAssetCommand>
像这样:
public class RegisterAssetCommandHandler
: ICommandHandler<RegisterAssetCommand>
{
private ILawbaseAssetRepository lawbaseAssetRepository;
private IAssetChecklistKctcPartRepository assetRepository;
public RegisterAssetCommandHandler(
ILawbaseAssetRepository lawbaseAssetRepository,
IAssetChecklistKctcPartRepository assetRepository)
{
this.lawbaseAssetRepository = lawbaseAssetRepository;
this.assetRepository = assetRepository;
}
public void Handle(RegisterAssetCommand command)
{
// Optionally validate the command
// Execute the command
}
}
或者,您甚至可以离开User
出于RegisterAssetCommand
通过注入IUserProvider
in the RegisterAssetCommandHandler
. The IUserProvider
接口可以有一个GetUserForCurrentContext
处理程序可以调用。
我希望这是有道理的。