是否可以将依赖内核存储在应用程序的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();
        }

是否可以将依赖内核存储在应用程序的onstart中作为静态变量

是否适合将内核存储为App类的静态成员,或者我宁愿从App类中删除它并在任何时候创建实例,我需要在windows代码中使用它

在应用程序的生命周期中,通常应该只有一个Kernel类的实例。Kernel实例可以安全地在线程上使用,并针对重用进行了优化。为每个请求或窗口创建它们可能会导致很大的开销(在内存和性能上)。

在哪里存储这个实例是另一回事。您通常希望防止直接从应用程序代码调用。你只需要在你的合成根中使用它。如果只有App类本身可以获得Kernel并从中解析服务,对我来说似乎非常好。