如何使用自动法解析操作参数
本文关键字:操作 参数 何使用 | 更新日期: 2023-09-27 18:35:28
如何执行解析参数,如果是操作类型?
public class TaskWrapper : ITaskWrapper
{
public TaskWrapper(Action action)
{
this.action = action;
}
}
public void Connect()
{
Program.Container.Resolve<TaskWrapper>(new NamedParameter("action", ToConnect)); // not work!
Program.Container.Resolve<TaskWrapper>(new TypedParameter(typeof(Action), ToConnect)); // not work!
}
private void ToConnect()
{
// some code...
}
命名参数和类型参数不起作用
首先,您不应该像处理 Program.Container
属性那样公开容器并解析依赖项。它是服务定位器的典型示例,它被认为是一种反模式。但是,如果您确实需要或想要这样做,您的代码应如下所示:
public void Connect()
{
Action action = Connect;
Program.Container.Resolve<ITaskWrapper>(new NamedParameter("action", action));
}
更好的方法是使用依赖注入,以实际应该使用的方式 - 注入依赖关系。
public class Connector : IConnector
{
public Connector(Func<Action, ITaskWrapper> taskWrapperFactory)
{
var taskWrapper = taskWrapperFactory(Connect);
}
private void Connect()
{
}
}
public class TaskWrapper : ITaskWrapper
{
private readonly Action _task;
public TaskWrapper(Action task)
{
_task = task;
}
}
您可以将与连接相关的方法移动到某个类,例如 Connector
,并在构造函数中注入TaskWrapper
。使用 Func<>
可以创建实例并传递不可解析的参数。
此外,您应该使用适当的接口(而不是直接类型)解析/注入依赖项,因为您完全失去了松散耦合组件的整个想法。