如何在Unity容器中捕获自动工厂(Func <t>)的解析上下文

时间:2018-10-05 23:01:50

标签: unity-container

我正在尝试创建一个方案,在该方案中,我可以使用Per Resolve Lifetime Manager,但也可以使用Unity自动工厂。我希望解析度使用与原始解析相同的状态,但是将解析度推迟到调用factory方法时。我的用例是,如果我调用factory方法,我希望数据库事务管理器传递给依赖项,但是如果不使用依赖项,则不要浪费时间和资源来构建依赖项。

我当时想创建一个新的Delegate并以与Func注册时相同的样式进行注册,但是我不确定哪个是正确的注入点。

public class MainMethod
{
  private readonly DependencyOne _dependencyOne;

  public MainMethod(DependencyOne dependencyOne)
  {
    _dependencyOne = dependencyOne;
  }
}

public class DependencyOne
{
  private readonly Defer<DependencyTwo> _dependencyTwo;
  private readonly TransactionManager _transactionManager;

  public DependencyOne(Defer<DependencyTwo> dependencyTwo, 
                        TransactionManager transactionManager)
  {
    _dependencyTwo = dependencyTwo;
    _transactionManager = transactionManager;
  }
  public DataMethod(Data data)
  {
    transactionManager.DoSomething();
    _dependencyTwo().Datamethod(data);  
  }
}
public class DependencyTwo
{
  private readonly Defer<DependencyTwo> _dependencyTwo;
  private readonly TransactionManager transactionManager;
  public DependencyOne(Defer<DependencyTwo> dependencyTwo, 
                        TransactionManager _transactionManager)
  {
    _dependencyTwo = dependencyTwo;
    _transactionManager = transactionManager;
  }
  public DataMethod(Data data)
  {
    transactionManager.DoSomething(); //Same Transaction Manager
    Datamethod(data);  
  }
}

因此,在本示例中,当MainMethod得到解析时,unity将立即解析DependencyOne,但是DependencyTwo仅在调用DataMethod时被解析。

我创建了一个包装器类,可以捕获作用域中的参数,但这并不理想,我想为此团结一心。

0 个答案:

没有答案