appbootstrapper.configure

时间:2015-07-09 21:07:57

标签: c# wpf autofac splash-screen caliburn.micro

所以我一直在寻找这个,但我找不到任何符合我需要的东西。我有一个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非常了解,如果有人能提出实现这一目标的最佳方法,那就太棒了。

0 个答案:

没有答案