using Kean.Domain.Task.Commands;
using Kean.Domain.Task.Models;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace Kean.Domain.Task.Strategies
{
///
/// 避让策略上下文
///
public sealed class AvertContext where T : AvertStrategy
{
private readonly T _strategy; // 策略实例
///
/// 初始化 Kean.Domain.Task.Strategies.AvertContext 类的新实例
///
public AvertContext(IServiceProvider serviceProvider) =>
_strategy = Activator.CreateInstance(typeof(T),
typeof(T).GetConstructors().First().GetParameters().Select(p => serviceProvider.GetService(p.ParameterType)).ToArray()) as T;
///
/// 生成用于避让的移库命令
///
/// 避让货位
/// 移库命令
public Task AutoCommand(Cell cell) =>
_strategy.AutoCommand(cell);
}
}