有人在C#写过自己的IOC容器吗?或者绝大多数人使用各种框架,如Spring.每个人的专业和意见是什么?
我正在观看有关依赖注入的课程视频,并且讲师讨论了di-container但没有详细解释,现在我读了一些文章,并且想确认一下我现在做对了。下面是简单的程序,我的问题是,
下面的Program类是最简单的di容器吗?如果不是这样的话,简单的di-container会怎么样
interface Implementable {
void doSmth();
}
class A implements Implementable {
@Override
public void doSmth() {
}
}
class B {
private Implementable i;
public B(Implementable implementable) {
this.i= implementable;
}
public void doSmth(){
i.doSmth();
}
}
Run Code Online (Sandbox Code Playgroud)
这是类双层容器吗?
class Program {
B b = new B(new A());
b.doSmth();
}
Run Code Online (Sandbox Code Playgroud) 我决定在C#中为MonoGame项目创建一个非常小的IoC容器.我决定自己创建一个的原因是为了提高性能并使用更少的我无法控制的库.由于IoC非常简单,我认为库不应该处理它.
我开始了一个天真的实现:
var container = new Container();
container.Register("service-alias",
container => new ServiceClass(container.Resolve("other.dep"));
container.Resolve("service-alias").MethodOnServiceClass()
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在C#的类型系统中做到这一点.一个Dictionary <string, Func<Container>>?如何键入resolve方法的返回值?