using Autofac;
using CirculateTool;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.Plugins;
///
/// 新的 WCS 定时任务类,添加 IOC 容器支持,添加非静态变量支持
///
[Component]
public class WcsCirculation(IComponentContext componentContext) : StartCirculation
{
private readonly IComponentContext _componentContext = componentContext;
public override void StartTask(Type type, object[]? instanceParams = null)
{
object? instance = null;
var methods = type.GetMethods();
foreach (var method in methods)
{
var attributes = method.GetCustomAttributes(false);
foreach (var attribute in attributes)
{
if (attribute is not CirculationAttribute needDurable) continue;
string methodDescription = needDurable.MethodDescription ?? $"{type.Name}.{method.Name}";
instance ??= CreateInstance(type);
bool Action() => (bool)(method.Invoke(instance, []) ?? false);
StartTask(Action, methodDescription, needDurable.CirculationTime);
break;
}
}
}
private object? CreateInstance(Type type)
{
var constructors = type.GetConstructors();
var constructorList = constructors.ToList();
constructorList = [.. constructorList.OrderByDescending(s => s.GetParameters().Length)];
foreach (var constructor in constructorList)
{
var parameters = constructor.GetParameters();
if (parameters.Length == 0) return Activator.CreateInstance(type);
List