是否可以注册一个带有预期从创建点传递的参数的类?
我知道可以这样做:
GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>.
AsTransient.DelegateTo(
function: TUserProcessor
begin
Result := TUserProcessor.Create(GetCurrentUser);
end
);
但是那里的参数被绑定到容器被注册的执行上下文,而不是对象被实例化的地方。
例如,这样的事情可能吗?
GlobalContainer.Resolve<IMathService>([FCurrentUser]);
我知道有些人提倡使用非常简单的构造函数,但有时构造函数参数看起来很明显是要走的路:
构造的对象需要对象参数才能工作,所以必须满足引用。该参数还使该约束在查看类时更加明显。
如果您尝试使用对象而不首先进行分配,您可以在方法或属性中分配引用并在所有其他方法中引发和异常。我不喜欢编写这种类型的代码,这只是浪费时间,只是使用构造函数参数并在那里检查。代码越少,IMO 就越好。
此外,被传递的对象对于使用容器构造新对象的对象(例如 Transaction 对象)是本地的,并且具有某种状态(它不是我可以通过容器获得的新对象)。