【发布时间】:2015-12-10 15:40:19
【问题描述】:
我决定用 C# 为 MonoGame 项目创建一个非常小的 IoC 容器。我决定自己创建一个的原因是为了提高性能并使用更少的我无法控制的库。由于 IoC 是如此简单,我认为图书馆不应该处理它。
我开始了一个幼稚的实现:
var container = new Container();
container.Register("service-alias",
container => new ServiceClass(container.Resolve("other.dep"));
container.Resolve("service-alias").MethodOnServiceClass()
但我不知道如何在 C# 的类型系统中执行此操作。 Dictionary <string, Func<Container>>?如何键入 resolve 方法的返回值?
【问题讨论】:
-
使用泛型。或者使用任何免费提供的 IoC 容器,不要重新发明轮子。
-
作为学习练习,一定要编写自己的 IoC 容器。我不建议您自己编写用于生产用途。我参与了一个他们这样做的项目 - 这根本不值得,并且慢慢地(从人力的角度来看,代价高昂)被 Autofac 取代。
-
感谢您的支持,克里斯!关于泛型,我不明白他们如何在这里帮助我。 Container 应该是一个泛型类吗?但是,我将拥有许多容器,而不是单例。
标签: c# inversion-of-control ioc-container