【发布时间】:2014-07-17 20:13:57
【问题描述】:
我正在编写一个类库(在 C# 中),它将与我无法控制的应用程序一起分发。我的库也有点安全敏感,因此我不想允许调用应用程序对类库的依赖项进行任何配置。它必须是自包含的并初始化自己的依赖项。
同时,我希望它是可单元测试的和松耦合的,并且我想使用 IoC 容器来管理依赖项。目前我正在使用内部构造函数和[InternalsVisibleTo()],以便单元测试可以进行手动注入。我更喜欢使用 Ninject 作为我的 IoC 容器,但我认为这与问题无关。
我正在努力想出一个在生产中初始化我的 IoC 容器的好策略,因为类库实际上并没有定义 入口点,它有许多类可以在不知道应用首先使用哪个的情况下进行实例化。
我想知道是否可能存在某种AssemblyLoad 事件,并且确实AppDomain 似乎有这样的事件,但我的程序集必须已经加载到 AppDomain 中,然后我才能连接到它,所以我总是会错过由我自己的程序集加载引发的事件。我还考虑过使用静态初始化程序或构造函数,但我不太乐意使用 IoC 容器设置来污染每个可能的类,因为这会使它们与容器紧密耦合。我不想只解耦我的代码,然后将其耦合到 IoC 容器。
我发现了一些其他问题讨论这个话题,但没有一个真正涉及我的情况。一个建议使用静态初始化器,另一个建议应用程序应该始终是组合根。
还有其他方法吗?
【问题讨论】:
-
您的消费者会使用 Ninject 来获取您的实现吗?如果没有,你打算如何使用 Ninject 将任何东西注入你的类?
-
我的消费者可能会也可能不会使用 Ninject,我不知道。我的类库可能会作为 NuGet 包使用,因此我将在该级别依赖 Ninject。
标签: c# ninject inversion-of-control class-library