如果我有下面的代碼包裝解決實例 - 團結依賴注入
[Serializable]
public abstract class ValidatedCommandArgs
{
}
public interface IValidatedCommand<T>
where T : ValidatedCommandArgs
{
IEnumerable<ValidationError> Execute(T args);
}
現在一個簡單的實現
public class CreateClientArgs : ValidatedCommandArgs
{
public string Code { get; set; }
public string Name { get; set; }
}
public class CreateClientCommand : IValidatedCommand<CreateClientArgs>
{
public IEnumerable<ValidationError> Execute(CreateClientArgs args)
{
throw new NotImplementedException();
}
}
然後註冊的命令處理程序
container.RegisterType<IValidatedCommand<CreateClientArgs>>, CreateClientCommand>();
現在我想要什麼能夠做的就是包裝每一個IValidatedCommand的分辨率,這樣我就可以做到這一點
public class LoggedCommandHandler<T> : IValidatedCommand<T>
where T : ValidatedCommandArgs
{
readonly IValidatedCommand<T> Inner;
public LoggedCommandHandler(IValidatedCommand<T> inner)
{
this.Inner = inner;
}
IEnumerable<ValidationError> IValidatedCommand<T>.Execute(T args)
{
//Serialize ARGS
//Save Inner.GetType().ClassName + the serialized args to the DB
return Inner.Execute(args);
}
}
然後,每當我解決(例如)IValidatedCommand<CreateClientArgs>
我真的得到LoggedCommandHandler<CreateClientArgs>
它的實例與inner = CreateClientCommand
對不起解決的這麼詳細,但我不記得什麼技術被稱爲。
感謝格式編輯塞巴斯蒂安! –