我有一个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/