相关疑难解决方法(0)

我可以将构造函数参数传递给Unity的Resolve()方法吗?

我使用Microsoft的Unity进行依赖注入,我想做这样的事情:

IDataContext context = _unityContainer.Resolve<IDataContext>();
var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context
var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context

IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance
var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2);
Run Code Online (Sandbox Code Playgroud)

RepositoryA并且RepositoryB都有一个带IDataContext参数的构造函数,我希望Unity使用我传递它的上下文初始化存储库.另请注意,IDataContext未在Unity中注册(我不想要3个实例IDataContext).

.net c# dependency-injection unity-container constructor-injection

87
推荐指数
4
解决办法
9万
查看次数

delphi - 如何将参数从实例化器传递给spring4d依赖注入框架中的构造函数?

可以注册一个具有预期从创建点传递的参数的类吗?

我知道可以这样做:

GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>.
AsTransient.DelegateTo(
    function: TUserProcessor
    begin
      Result := TUserProcessor.Create(GetCurrentUser);
    end
  );
Run Code Online (Sandbox Code Playgroud)

但是参数被绑定到容器被注册的执行上下文,而不是对象获取的地方.

这样的事情可能就是这样吗?

GlobalContainer.Resolve<IMathService>([FCurrentUser]);
Run Code Online (Sandbox Code Playgroud)

我知道一些peoble的拥护者拥有非常简单的构造函数,但有时候构造函数参数看起来很清楚:

  1. 构造的对象需要使用object参数,因此必须满足引用.该参数还使得该约束在类中更加明显.

  2. 你可以在方法或属性中分配引用,如果在没有先完成赋值的情况下尝试使用该对象,则可以在每个其他方法中引发和异常.我不喜欢编写这种类型的代码,这只是浪费时间,只是使用构造函数参数并检查那里.代码越少,IMO越好.

  3. 此外,对象被传递给使用容器(例如Transaction对象)构造新对象的对象本地,并且具有一些状态(它不是我可以通过容器获得的新对象).

delphi dependency-injection delphi-xe2 spring4d

8
推荐指数
1
解决办法
1544
查看次数