我有一个Container,它为View注册了一个Presenter类:

Container.Register<ListCellPresenter>();


Presenter的构造函数为其视图采用一个参数:

public ListCellPresenter(ListCellView view) {
     this.view = view;
}


我有一个View解析Presenter的实例,将自身作为构造函数的参数传递:

Container.Resolve<ListCellPresenter>(new object[] {this});


在主屏幕上,我有多个View实例,每个实例都需要自己的Presenter实例。那部分起作用。

但是,似乎DryIoc不断重用在运行时收到的第一个对象,以满足构造函数的参数。当希望每个Presenter实例都应接收唯一实例时,它们会收到View的第一个实例。

我尝试了在文档中找到的各种示例组合,包括:


RegisterDelegate注册,其中委托明确使用Args.Index<ListCellView>(0)来满足依赖关系
使用Register向标准Made.Of(() => new ListCellPresenter(Arg.Of<ListCellView>())注册
var getPresenter = Container.Resolve<Func<ListCellView, ListCellPresenter>>();后跟presenter = getPresenter(this);进行解析


任何提示或指导,将不胜感激。

最佳答案

我发现打开命名范围可以满足您的需求。

var container = new Container();
container.Register<TargetClass>();
using (var scope = container.OpenScope("View_1"))
{
    var instanceA = scope.Resolve<TargetClass>(new[] { typeof(string) });
}

using (var scope = container.OpenScope("View_2"))
{
    var instanceB = scope.Resolve<TargetClass>(new[] { typeof(int) });
}

关于c# - 重用DryIoc构造函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54138000/

10-12 04:31