在abp工作单元

时间:2018-03-16 09:53:42

标签: aspnetboilerplate

我在unitofwork方法中解析一个对象,而对象依赖关系是一个IRepository。 我释放对象然后在unitofwork方法中使用另一个IRepository,它将抛出dbcontext dispos错误。我必须从DI释放对象吗?

private readonly IIocManager _iocManager;
    private readonly IRepository<Bill> _billRepository;

    public PayService(IIocManager iocManager,IRepository<Bill> billRepository)
    {
        this._iocManager = iocManager;
        _billRepository = billRepository;
    }


    [AbpAuthorize]
    public PayRestultDto SwingCard(PayDto input)
    {
        var itr = _iocManager.IocContainer.Resolve<ITradeOrder>(input.PayType.ToString("G"));
        PayRestultDto result;
        try
        {
            result = itr.Pay(input);
        }
        finally
        {
            _iocManager.IocContainer.Release(itr);
        }
        if (result != null)
        {
            _billRepository.Insert(result);
        }
        return result;
    }

1 个答案:

答案 0 :(得分:0)

您需要在匿名类型的实例中传递构造函数参数。了解它是如何为您的案件做的;

var itr = _iocManager.IocContainer.Resolve<ITradeOrder>(new { PayType = input.PayType.ToString("G") });

其中 PayType 是TradeOrder类构造函数中的参数名称。

  • 让其他人知道如何使用构造函数参数解析接口
IFoo foo = container.Resolve<IFoo>(new { Param1 = "Value1", Param2 = "Value2"});
  • 如果您使用的旧版C#不支持匿名类型,则可以使用词典
var parameters = new Dictionary<string, object>();
parameters.Add("Param1", "Value1");
parameters.Add("Param2", "Value2");
IFoo foo = container.Resolve<IFoo>(parameters );