c# – 映射相同类型的模型以查看实例

我在游戏中使用了Strange IOC,而我在查看如何将视图映射到模型时遇到了麻烦.

在游戏开始时,我创建了几个敌人模型.这些模型包含操作期间使用的各种统计数据(例如损伤量,健康状况等).我使用命令操作这些统计数据.然后,我在Start命令中遍历所有模型,并为它们创建适当的视图.每个EnemyView都有一个EnemyMediator,它应该激活用于管理AI的命令.

我需要一种方法来告诉View他们属于哪个Model实例.奇怪的IOC注入绑定通常通过类型或可选的附加标识符来区分.我的所有敌人模型和视图都是相同的类型,因此我必须使用此标识符.然后在尝试实际注入实例时出现问题.

我最初尝试给每个敌人的模型一个GUID,并将其传递给View和Mediator,但问题在于Strange IOC注入使用静态注入标准.由于显而易见的原因,尝试在Inject属性中应用我的GUID会引发编译器错误.

这导致我使用InjectionBinder.Injector.Inject()在我的Command执行期间使用GUID手动获取绑定.这有效,但它现在增加了对我不应该需要的注入器的依赖性,而且我基本上使用注入器作为服务定位器,并且失去了注入的好处.

问题是,我不知道如何将我的EnemyView所属的特定模型注入到我触发的命令中,因此我遇到了Service Locator风格的变通方法.

供参考,这个:

是我想要遵循的应用程序结构.

解决方法:

这不是一个直接的解决方案,但这就是我解决这个问题的方法.我为所有敌人创建了一个单身人士模型.此模型包含一个字典,其中键是view.GetInstanceID(),值是一个保存特定敌人的统计信息的类.

public class EnemyModel : IEnemyModel
{
    // int is the id of the enemy's instance id in the view i.e. view.GetInstanceID()
    public IDictionary<int,Enemy> enemyDict {get;set;}

    public EnemyModel ()
    {
        enemyDict = new Dictionary<int,Enemy>();
    }
}

public class Enemy
{
    public bool  isDangerous = false;
    public float health = 1;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐