C# 如何将依赖项注入App.xaml.cs?

C# 如何将依赖项注入App.xaml.cs?,c#,wpf,dependency-injection,autofac,C#,Wpf,Dependency Injection,Autofac,我没有找到任何类似的例子,所以我决定问这个问题 我正在使用Autofac注册我的服务层接口,我想知道,我可以在App.xaml.cs中注入一个吗 我有自己的日志服务,我希望在应用程序出现致命错误时运行该服务 据我所知,您可以采用类似的方式,我可以在App.xaml.cs中也这样做吗 奥托法克国际奥委会: public class BootStrapper { /// <summary> /// IoC container ///

我没有找到任何类似的例子,所以我决定问这个问题

我正在使用Autofac注册我的服务层接口,我想知道,我可以在App.xaml.cs中注入一个吗

我有自己的日志服务,我希望在应用程序出现致命错误时运行该服务

据我所知,您可以采用类似的方式,我可以在App.xaml.cs中也这样做吗

奥托法克国际奥委会:

public class BootStrapper
    {
        /// <summary>
        /// IoC container
        /// </summary>
        /// <returns></returns>
        public static IContainer BootStrap()
        {
            var builder = new ContainerBuilder();

            builder.RegisterType<EventAggregator>()
              .As<IEventAggregator>().SingleInstance();

            builder.RegisterType<LogService>()
              .As<ILogService>().SingleInstance();

            builder.RegisterType<DeleteView>().AsSelf();
            builder.RegisterType<DeleteViewModel>().AsSelf().SingleInstance();
            builder.RegisterType<PhraseView>().AsSelf();
            builder.RegisterType<PhraseViewModel>().AsSelf().SingleInstance().WithParameter(new NamedParameter("searchPhrase", ""));
            builder.RegisterType<PopulateDictionaries>().AsSelf().SingleInstance();

            return builder.Build();
        }
    }
如果要向应用程序类注入依赖项,则应定义自定义主方法,在其中实例化应用程序类:

如果执行此操作,请记住将App.xaml的生成操作从ApplicationDefinition更改为Page。

如果要向App类注入依赖项,则应定义自定义主方法,在其中实例化App类:


如果执行此操作,请记住将App.xaml的构建操作从ApplicationDefinition更改为Page。

对于最先加载/执行的位置,我通常会显式调用DependencyContainer来解析任何依赖项。您是否尝试过这样做,而不是从构造函数中进行注入?这可能会对您有所帮助:问题是您正在尝试在设置容器之前进行注入。大多数DI框架都需要一次性配置容器,这通常是在应用程序启动时,也就是您遇到此问题的地方。我没有提到,我已经为注册依赖项和视图添加了IoC+VM代码。现在代码正在编译并没有引发异常。但我不确定App.xaml.cs的DI构造函数是否会在未处理异常的情况下使用。我需要在这个类中使用LogService的singleton。WPF只有两种不同的启动方式,我相信1种完全通过XAML启动,没有应用程序代码落后,2种应用程序代码落后。对于后者,我看不出在没有为第一个加载/执行的位置设置DI yetFor的情况下如何注入AppILogService日志,我通常会显式调用DependencyContainer来解析任何依赖项。您是否尝试过这样做,而不是从构造函数中进行注入?这可能会对您有所帮助:问题是您正在尝试在设置容器之前进行注入。大多数DI框架都需要一次性配置容器,这通常是在应用程序启动时,也就是您遇到此问题的地方。我没有提到,我已经为注册依赖项和视图添加了IoC+VM代码。现在代码正在编译并没有引发异常。但我不确定App.xaml.cs的DI构造函数是否会在未处理异常的情况下使用。我需要在这个类中使用LogService的singleton。WPF只有两种不同的启动方式,我相信1种完全通过XAML启动,没有应用程序代码落后,2种应用程序代码落后。对于后者,我看不出在没有设置DI的情况下如何注入AppILogService日志yet@bakunet:你试过这个还是发生了什么?这是一种注入App类的方式,显然与downvoter的想法相反:@bakunet:你尝试过这个还是发生了什么?这是注入App类的方式,显然与downvoter的想法相反:
public class BootStrapper
    {
        /// <summary>
        /// IoC container
        /// </summary>
        /// <returns></returns>
        public static IContainer BootStrap()
        {
            var builder = new ContainerBuilder();

            builder.RegisterType<EventAggregator>()
              .As<IEventAggregator>().SingleInstance();

            builder.RegisterType<LogService>()
              .As<ILogService>().SingleInstance();

            builder.RegisterType<DeleteView>().AsSelf();
            builder.RegisterType<DeleteViewModel>().AsSelf().SingleInstance();
            builder.RegisterType<PhraseView>().AsSelf();
            builder.RegisterType<PhraseViewModel>().AsSelf().SingleInstance().WithParameter(new NamedParameter("searchPhrase", ""));
            builder.RegisterType<PopulateDictionaries>().AsSelf().SingleInstance();

            return builder.Build();
        }
    }
public class ViewModelLocator
    {
        IContainer _container;
        public ViewModelLocator()
        {
            _container = BootStrapper.BootStrap();
        }

        //view models below
    }
public class Program
{
    [STAThread]
    public static void Main(string[] args)
    {
        ILogService logService = ...;
        App app = new App(logService);
        app.InitializeComponent();
        app.Run();
    }
}