Kernel.Get() 线程安全吗?我的目标是在我的所有组件之间共享我的内核实例,并且它们都可以很好地在不同线程上同时调用 Kernel.Get()。
Kernel.Get() 线程安全吗?
在位于不同 dll 中的所有应用程序组件之间共享应用程序内核的最佳模式是什么?如果有意义的话,我不希望将工厂实例传递给我的应用程序的每个组件。
最佳答案
Get 是线程安全的,但创建新的内核实例 (ctor) 目前不是线程安全的。
通常,您应该尝试将您对内核的访问降至最低。到处访问内核形式是一个非常糟糕的设计,并且会使您的代码的可重用性大大降低。见 Service Locator Antipattern
您访问内核的唯一情况应该是:
在所有情况下,将对内核的访问限制为复合根,并将工厂(类或
Func<T>
)注入(inject)到需要在运行时创建对象的类中。让这些工厂访问内核的最佳方法仍然是构造函数注入(inject),即使您不喜欢这样做。或使用 Func<T>
(Does Ninject support Func (auto generated factory)?)。
关于ninject - 是 Kernel.Get<T>() 线程安全 + 在组件之间共享内核的良好模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338603/