C# 设置作用域弹出窗体属性数据
我有一个winforms应用程序,它根据运行时数据在运行时动态创建子窗体弹出窗口。我会的 就像每个弹出窗口都有自己的范围一样,我认为我已经做到了。另外,我想根据运行时数据设置一个由作用域解析的“播放器配置文件”。这就是我需要帮助的地方 每个弹出窗体都有一个配置文件数据属性:C# 设置作用域弹出窗体属性数据,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,我有一个winforms应用程序,它根据运行时数据在运行时动态创建子窗体弹出窗口。我会的 就像每个弹出窗口都有自己的范围一样,我认为我已经做到了。另外,我想根据运行时数据设置一个由作用域解析的“播放器配置文件”。这就是我需要帮助的地方 每个弹出窗体都有一个配置文件数据属性: public partial class PlayerForm : Form { public IPlayerProfile Profile { get; set; } } 我使用注册的表单生成器打开表单: pub
public partial class PlayerForm : Form
{
public IPlayerProfile Profile { get; set; }
}
我使用注册的表单生成器打开表单:
public TForm GetForm<TForm>(ActiveGame gameInfo) where TForm : PlayerForm
{
var scope = new Scope(_container);
var form = scope.GetInstance<TForm>();
form.GameInfo = gameInfo;
// set the profile:
// form.Profile = ...
form.Closed += (s, e) => scope.Dispose();
return form;
}
调用
Container.GetAllInstances()
相当于Container.GetInstance()
,这也适用于Scope
,正如您所提到的,它会丢失GetAllInstances
方法。所以你可以称之为:
var profiles = scope.GetInstance<IEnumerable<IPlayerProfile>>();
var profiles=scope.GetInstance();
或者您可以解决任何其他问题,例如:
var profiles = scope.GetInstance<IReadOnlyCollection<IPlayerProfile>>();
var profiles=scope.GetInstance();
谢谢不过,接下来的问题是,如果我使用您的建议,我会得到
“DefaultProfile是使用“作用域”生活方式注册的,但实例是在活动(作用域)作用域的上下文之外请求的。
。而如果我使用作用域.GetInstance(typeof(DefaultProfile))
例如,我没有发现异常。有什么区别吗?很有趣。可能是一个bug。让我调查一下,然后再给你回复。我可以确认这是一个bug。我补充说,你可以跟踪它的状态。对于给你带来的不便,我深表歉意。一点也不担心。感谢usualI推出修复程序时提供了一个很棒的框架和强大的支持这是一个错误。
var profiles = scope.GetInstance<IReadOnlyCollection<IPlayerProfile>>();