DLL的入口点
本文关键字:入口 DLL | 更新日期: 2023-09-27 18:01:21
我有一个c# .net
WPF
应用程序,现在我需要注册一些已经被BLL
和DAL
层使用的东西(基本上是NInject
IoC
模式的内核)。
我想知道dll
的入口点或类似的东西,我可以把代码(内核注册)。
对于WPF
section,我使用App.xaml.cs
,对于WCF
section我使用Global.asax.cs
,因为它们是这些东西的入口点。但是独立的dlls
呢,它们的切入点是什么?
一种方法是,我可以在我的dll中添加一个静态类来实现这个目的,并从app.xaml.cs
调用BLL的这个方法并注册我的内核。但这似乎更像是一种变通而不是方法。
请指导我更切题和合乎逻辑。
容器配置是在应用程序的复合根(第一次调用代码的地方)中完成的。正如您已经说过的,在WPF的情况下,这是app . example .cs。在这里你注册所有层的组件。最好是在App.xaml之外的另一个程序集中编写UI代码。这样,应用程序的创建就与代码的执行完全分离了。
我建议阅读Mark Seemans的书,书中详细描述了这一点。
c#不允许在程序集加载时运行代码,并且静态类构造函数在第一次访问该类时惰性执行。然而,CLR支持静态的"程序集构造函数",也就是说,它在程序集首次加载时执行。请注意,引用仍然是惰性加载的,除非您使用特殊属性来标记被引用的程序集为主动加载。
如果需要,可以通过ildasm/ilasm将静态构造函数放入汇编模块。你可以编写一些脚本在构建时自动执行。
我自己还没有做过这个,所以我不能给出任何例子。不过如果你考虑的话,我可以给你找一些链接
这听起来几乎像是你想要一个"插件"模型,应用程序可以动态地发现可用的组件。如果是这样,那么MEF可能是一个更好的选择。
MEF似乎在应用程序可能不知道所有依赖项的情况下工作得很好。依赖注入,另一方面,假设你的应用程序事先对这些依赖项相当了解。
我不知道这是不是你想要的,但它可能值得一看。