将接口实现作为组件添加到游戏对象中



使用依赖注入,您可以有一个相同的接口来表示不同的类,因为类实现可以根据绑定阶段的绑定阶段定义绑定到依赖容器。我的问题是,一旦完成了各自的绑定,实现是否是单一的行为,是否有机会将接口作为组件添加到游戏对象中。

我为什么要这么做的故事很长,所以可以假设必要性刚刚出现:(。

找到一些伪代码以更好地理解:

public interface IFoo {
//...
}
public class FooIplementtation1: MonoBehaviour {
//....
}
public class FooIplementtation2: MonoBehaviour {
//....
}
if (someCondition) {
Container.Bind<IFoo >().To<FooIplementtation1>();
} else {
Container.Bind<IFoo >().To<FooIplementtation2>()
}

我打算做的是:

//Error. Interface type cannot be added as component.
someTransform.gameObject.AddComponent<IFoo>();

但我得到了错误:

类型IFoo不能用作泛型或方法GameObject.AddComponent<T>((。

方法签名为:

public T AddComponent<T>() where T : Component;

Si我试图让我的接口从Monobehaviour继承并形成Component,但没有成功。

你知道这是否可能吗?如果可能,怎么做?

GameObject.AddComponent文档说明

将名为className的组件类添加到游戏对象中。

组件类型应该是类,不能是结构也不能是接口。接口只是一个契约,声明类必须实现给定的接口函数和属性。您隐藏了为什么要为代码使用接口,但若有可能,请创建一个基类,其中包含所有类共享的所有内容。短期使用多态性。从monoehaviour继承基类,就可以实现您想要实现的目标。

也可以这样想,接口根本没有数据。它们只是空的实现,它的哪一部分可以是对象的组件?它们只是让编码变得更容易而已。也许,你想看看C#设计模式。

最新更新