是否可以将依赖内核存储在应用程序的onstart中作为静态变量
本文关键字:onstart 变量 静态 应用程序 依赖 存储 内核 是否 | 更新日期: 2023-09-27 18:15:23
我使用Ninject框架将DI添加到wpf应用程序中。将内核存储为App类的静态成员是否合适?或者我宁愿从App类中删除它,并在任何时候创建实例,我需要在使用之前在windows代码中使用它(IUnitOfWork unit = new…)块吗?
App.xaml.cs
public partial class App : Application
{
internal static StandardKernel kernel;
protected override void OnStartup(StartupEventArgs e)
{
kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
base.OnStartup(e);
}
}
在不同的窗口中调用内核:
using (IUnitOfWork unitOfWork = App.kernel.Get<IUnitOfWork>())
{
comboFloors.ItemsSource = unitOfWork.Buildings.GetLivingFloors();
}
是否适合将内核存储为App类的静态成员,或者我宁愿从App类中删除它并在任何时候创建实例,我需要在windows代码中使用它
在应用程序的生命周期中,通常应该只有一个Kernel
类的实例。Kernel
实例可以安全地在线程上使用,并针对重用进行了优化。为每个请求或窗口创建它们可能会导致很大的开销(在内存和性能上)。
在哪里存储这个实例是另一回事。您通常希望防止直接从应用程序代码调用。你只需要在你的合成根中使用它。如果只有App类本身可以获得Kernel
并从中解析服务,对我来说似乎非常好。