DLL的入口点

本文关键字:入口 DLL | 更新日期: 2023-09-27 18:01:21

我有一个c# .net WPF应用程序,现在我需要注册一些已经被BLLDAL层使用的东西(基本上是NInject IoC模式的内核)。

我想知道dll的入口点或类似的东西,我可以把代码(内核注册)。

对于WPF section,我使用App.xaml.cs,对于WCF section我使用Global.asax.cs,因为它们是这些东西的入口点。但是独立的dlls呢,它们的切入点是什么?

一种方法是,我可以在我的dll中添加一个静态类来实现这个目的,并从app.xaml.cs调用BLL的这个方法并注册我的内核。但这似乎更像是一种变通而不是方法。

请指导我更切题和合乎逻辑。

DLL的入口点

容器配置是在应用程序的复合根(第一次调用代码的地方)中完成的。正如您已经说过的,在WPF的情况下,这是app . example .cs。在这里你注册所有层的组件。最好是在App.xaml之外的另一个程序集中编写UI代码。这样,应用程序的创建就与代码的执行完全分离了。

我建议阅读Mark Seemans的书,书中详细描述了这一点。

c#不允许在程序集加载时运行代码,并且静态类构造函数在第一次访问该类时惰性执行。然而,CLR支持静态的"程序集构造函数",也就是说,它在程序集首次加载时执行。请注意,引用仍然是惰性加载的,除非您使用特殊属性来标记被引用的程序集为主动加载。

如果需要,可以通过ildasm/ilasm将静态构造函数放入汇编模块。你可以编写一些脚本在构建时自动执行。

我自己还没有做过这个,所以我不能给出任何例子。不过如果你考虑的话,我可以给你找一些链接

这听起来几乎像是你想要一个"插件"模型,应用程序可以动态地发现可用的组件。如果是这样,那么MEF可能是一个更好的选择。

MEF似乎在应用程序可能不知道所有依赖项的情况下工作得很好。依赖注入,另一方面,假设你的应用程序事先对这些依赖项相当了解。

我不知道这是不是你想要的,但它可能值得一看。