C# 设置作用域弹出窗体属性数据

C# 设置作用域弹出窗体属性数据,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,我有一个winforms应用程序,它根据运行时数据在运行时动态创建子窗体弹出窗口。我会的 就像每个弹出窗口都有自己的范围一样,我认为我已经做到了。另外,我想根据运行时数据设置一个由作用域解析的“播放器配置文件”。这就是我需要帮助的地方 每个弹出窗体都有一个配置文件数据属性: public partial class PlayerForm : Form { public IPlayerProfile Profile { get; set; } } 我使用注册的表单生成器打开表单: pub

我有一个winforms应用程序,它根据运行时数据在运行时动态创建子窗体弹出窗口。我会的 就像每个弹出窗口都有自己的范围一样,我认为我已经做到了。另外,我想根据运行时数据设置一个由作用域解析的“播放器配置文件”。这就是我需要帮助的地方

每个弹出窗体都有一个配置文件数据属性:

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>>();