所以我一直在寻找这个,但我找不到任何符合我需要的东西。我有一个WPF应用程序,我正在使用Caliburn Micro和Autofac。
我的App.xaml
<Application x:Class="Drogo.Meera.Ui.Wpf.Launcher.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:launcher="clr-namespace:Drogo.Meera.Ui.Wpf.Launcher">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<launcher:AppBootstrapper x:Key="AppBootstrapper"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
AppBootstrapper
public class AppBootstrapper : BootstrapperBase
{
private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private IContainer _container;
public AppBootstrapper()
{
this._log.Debug("AppBootstrapper ctor...");
this.Initialize();
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
this._log.Debug("AppBootstrapper.OnStartup");
}
protected override void Configure()
{
this._log.Debug("ENTER:AppBootstrapper.Configure");
try
{
var builder = new ContainerBuilder();
builder.Register<IWindowManager>(c => new WindowManager()).InstancePerLifetimeScope();
builder.Register<IEventAggregator>(c => new EventAggregator()).InstancePerLifetimeScope();
// register all other dependencies on the builder
this._container = builder.Build();
}
catch (Exception ex)
{
this._log.Error(ex.ToString());
}
this._log.Debug("EXIT:AppBootstrapper.Configure");
}
protected override object GetInstance(Type service, string key)
{
...
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
...
}
protected override void BuildUp(object instance)
{
this._container.InjectProperties(instance);
}
}
好的,所以我的应用程序运行正常(我尚未定义主窗口,仍在进行中)。我期待我将从引用的程序集中获得许多Autofac模块,我将在上面的Configure
方法中加载所有依赖项,我希望这可能需要几秒钟(可能需要4-5秒或更长时间)
我想要的是在应用程序启动后立即加载启动画面(我对可以使用进度更新的单例SplashScreen感兴趣)并在执行AppBootstrapper
之前(最好)。
我已经看过使用将构建类型设置为SplashScreen的图像的示例,但这不是我想要的。我想要一个带有TextBlock的基于窗口的启动画面,每个Autofac模块都可以在应用程序启动时进行更新。我还尝试在OnStartup
方法中创建一个启动画面,但这已经太晚了,因为这发生在Configure
之后。
我是WPF的新手,甚至比Caliburn Micro更新,但对Autofac非常了解,如果有人能提出实现这一目标的最佳方法,那就太棒了。