重用 DryIoc 构造函数参数
DryIoc Constructor Argument Reused
我有一个 Container
为一个视图注册了一个 Presenter
class:
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)
来满足依赖性
- 使用
Made.Of(() => new ListCellPresenter(Arg.Of<ListCellView>())
向标准 Register
注册
- 用
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) });
}
该问题确实是一个bug,在最新的预览版中已经修复:
https://github.com/dadhi/DryIoc/issues/29
我有一个 Container
为一个视图注册了一个 Presenter
class:
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)
来满足依赖性 - 使用
Made.Of(() => new ListCellPresenter(Arg.Of<ListCellView>())
向标准 - 用
var getPresenter = Container.Resolve<Func<ListCellView, ListCellPresenter>>();
解析,然后用presenter = getPresenter(this);
Register
注册
如有任何提示或指导,我们将不胜感激。
我发现打开命名作用域可以满足您的需要。
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) });
}
该问题确实是一个bug,在最新的预览版中已经修复: https://github.com/dadhi/DryIoc/issues/29