我一直在为创建目的而创建自己的IoC容器。在问了一些有关它们的问题后,我发现创建一个工厂来“解决”这些对象是最好的解决方案(see third solution here)。用户Krzysztof Koźmic表明,温莎城堡实际上可以为你实现这一点。在没有创建实现的情况下实现接口(动态代理?)
我一直在读清楚CW的来源。我知道Resolve何时被调用,它“返回接口”。这个接口如何“截取”调用(因为后面没有实现)并将其称为自己的方法?
我知道这里显然有一些反思技巧,这真是太神奇了。我完全不知道“拦截”是如何完成的。我尝试在git上冒险尝试兔子洞,但我迷路了。如果任何人都能指出我正确的方向,那将非常感激。
此外 - 不会创建一个类型的工厂具有对调用代码内的容器的依赖?在ASP.NET MVC术语中,这就是我所认为的。
编辑:找到Reflection.Emit ...这可能是什么用?
EDIT2:我越看越这个,自动创建工厂听起来越复杂。我可能最终只是坚持重复的代码。
感谢您的评论。我正在尝试*使用*“嘲笑”我尝试制作的IoC容器。温莎城堡使用某种技术来创建一个实现指定界面的“类型工厂”。如果您阅读我从Krzysztof发布的链接,您会明白我的意思。我不想使用第三方库,因为这些都是为了我自己的学习。你有没有关于课堂生成的任何资源?编辑:我知道我不需要*使用IL,我只是好奇它是如何完成的。谢谢! :) – TheCloudlessSky 2010-07-05 15:26:15
谢谢你。我要开始阅读。我可能不会实现这个功能,因为它看起来非常极端。但是,我要去看看这个,因为它非常有趣。谢谢! – TheCloudlessSky 2010-07-05 15:39:39
@ TheCloudlessSky,IL很有趣,因为你可以用它做一些非常强大的事情。但是它的确需要很多工作,而且Emit方法是非常自然的(它们不提供任何包含正确参数的检查,因此很容易错误地创建IL代码,而这些代码在运行时无法验证或爆炸。 )如果你使用它,只要记住peverify.exe是你的朋友。 – 2010-07-05 15:44:52