我有一个c# .net
WPF
应用程序,现在我需要注册{{1}使用的某些内容(基本上是NInject
IoC
模式的内核) }和BLL
图层。
我想知道DAL
的入口点或类似内容,我可以放置该代码(内核注册)。
对于dll
部分,我使用WPF
,App.xaml.cs
部分我使用WCF
,因为它们是这些内容的切入点。但是独立Global.asax.cs
呢,它们的切入点是什么。
一种方法是,我可以在我的dll中添加一个实现此目的的静态类,并从dlls
我调用BLL的这个方法并注册我的内核。但这似乎更像是一种解决方法而不是方法。
请指导我提供更多关键和合乎逻辑的内容。
答案 0 :(得分:4)
容器配置在应用程序的复合根目录中完成(第一次调用代码的位置)。正如您所说,在WPF的情况下,这是App.xaml.cs.在这里注册所有图层的组件。优选地,您必须使用除App.xaml之外的其他程序集中的UI代码。这样,spplication的创建与代码的执行完全分开。
我建议阅读Mark Seemans书中详细描述的内容。
答案 1 :(得分:2)
C#不允许在程序集加载时运行代码,并且静态类构造函数在首次访问类时会被懒惰地执行。但是,CLR支持一个静态的“程序集构造函数”,可以说,它是在首次加载程序集时执行的。请注意,引用仍然是懒惰加载,除非您插入特殊属性来标记要引用的引用程序集。
如果需要,可以通过ildasm / ilasm将静态构造函数放入程序集模块中。您可以制作一些脚本以在构建时自动执行此操作。
我自己也没有这样做,所以我不能举出任何例子。虽然如果你考虑这样做,我可以挖掘一些链接。
答案 2 :(得分:0)
这听起来像是你想要一个“插件”模型,应用程序可以动态发现可用的组件。如果是这样,那么MEF可能是更好的选择。
MEF似乎适用于应用程序可能不会提前了解其所有依赖关系的情况。另一方面,依赖注入假设您的应用程序提前了解这些依赖关系。
我不知道这是不是你想要的,但值得一看。