DLL 的入口点
Posted
技术标签:
【中文标题】DLL 的入口点【英文标题】:Entry Point of a DLL 【发布时间】:2011-09-30 08:55:34 【问题描述】:我有一个c# .net
WPF
应用程序,现在我需要注册一些已被BLL
和DAL
层使用的东西(基本上是NInject
IoC
模式的内核)。
我想知道dll
的入口点或类似的东西,我可以在其中放置代码(内核注册)。
对于WPF
部分,我使用App.xaml.cs
,对于WCF
部分,我使用Global.asax.cs
,因为它们是这些东西的入口点。但是独立的dlls
呢,他们的切入点是什么。
一种方法是,我可以在我的 dll 中添加一个静态类来实现这个目的,并从app.xaml.cs
我调用 BLL 的这个方法并注册我的内核。但这似乎更像是一种解决方法而不是方法。
请指导我更多的点和逻辑。
【问题讨论】:
【参考方案1】:容器配置是在应用程序的复合根目录中完成的(代码第一次被调用的地方)。正如您已经说过的,对于 WPF,这是 App.xaml.cs。在这里注册所有层的组件。最好您必须在 App.xaml 之外的另一个程序集中编写 UI 代码。这样一来,spplication 的创建就与代码的执行完全分离了。
我建议阅读 Mark Seeman 的书中对此进行了详细描述。
【讨论】:
感谢您的回复,但我的 UI 层或 app.xaml.cs 不包含 BLL 层的引用,UI 和 BLL 层之间还有一些其他层,我想不花钱直接在我的 UI 层中添加 BLL 层的引用。即使这仍然不是可行的方法,如果没有什么特别的,我会去买这本书,但请告诉我它的名字。 你误会了我的回答。包含 app.xaml 的引导程序集只做一件事。它设置您的应用程序。 UI 层进入另一个程序集。在这种情况下,引用所有层绝对没有问题。如果你想重用一些层并在另一个应用程序中替换其他层,你只需替换这个引导程序。【参考方案2】:C# 不允许在程序集加载时运行代码,静态类构造函数在首次访问该类时延迟执行。然而,CLR 支持静态“程序集构造函数”,可以说,它在第一次加载程序集时执行。请注意,引用仍然会延迟加载,除非您输入特殊属性来标记要急切加载的引用程序集。
如果您愿意,可以通过 ildasm/ilasm 将静态构造函数放入程序集模块。您可能可以编写一些脚本来在构建时自动执行此操作。
我自己还没有这样做,所以我不能举任何例子。不过,如果您考虑这样做,我也许可以挖掘一些链接。
【讨论】:
+1 为了增加可搜索性,经常使用术语模块初始化器【参考方案3】:听起来您几乎想要一个“插件”模型,应用程序可以在其中动态发现可用的组件。如果是这样,那么MEF 可能是更好的选择。
MEF 似乎适用于应用程序可能无法提前知道所有依赖项的情况。另一方面,依赖注入假定您的应用提前相当了解这些依赖关系。
我不知道这是否是你所追求的,但它可能值得一看。
【讨论】:
以上是关于DLL 的入口点的主要内容,如果未能解决你的问题,请参考以下文章