protected override void Load(ContainerBuilder builder)
        {
            var viewModelAssembly = typeof(ShellViewModel).Assembly;
            var viewAssemlby      = typeof(ShellView).Assembly;

            // Register Providers
            builder.RegisterType <VersionNumberProvider>().As <IVersionNumberProvider>().SingleInstance();
            builder.RegisterType <Elevation>().SingleInstance();

            var configurationProvider = new ChocolateyConfigurationProvider();

            builder.RegisterInstance(configurationProvider).As <IChocolateyConfigurationProvider>().SingleInstance();
            builder.RegisterType <ChocolateyService>().As <IChocolateyService>().SingleInstance();

            // Register ViewModels
            builder.RegisterAssemblyTypes(viewModelAssembly)
            .Where(type => type.Name.EndsWith("ViewModel", StringComparison.Ordinal))
            .Where(type => type.GetInterface(typeof(INotifyPropertyChanged).Name) != null)
            .AsSelf()
            .InstancePerDependency();

            builder.RegisterType <PackageViewModel>().As <IPackageViewModel>();

            // Register Views
            builder.RegisterAssemblyTypes(viewAssemlby)
            .Where(type => type.Name.EndsWith("View", StringComparison.Ordinal))
            .AsSelf()
            .InstancePerDependency();

            // Register the single window manager for this container
            builder.Register <IWindowManager>(c => new WindowManager()).InstancePerLifetimeScope();

            // Register the single event aggregator for this container
            builder.Register <IEventAggregator>(c => new EventAggregator()).InstancePerLifetimeScope();

            // Register Services
            builder.RegisterType <ProgressService>().As <IProgressService>().SingleInstance();
            builder.RegisterType <PersistenceService>().As <IPersistenceService>().SingleInstance();
            builder.RegisterType <ConfigService>().As <IConfigService>().SingleInstance();

            // Register Mapper
            var mapperConfiguration = new MapperConfiguration(config =>
            {
                config.CreateMap <IPackageViewModel, IPackageViewModel>()
                .ForMember(vm => vm.IsInstalled, options => options.Ignore());

                config.CreateMap <IPackage, Package>();
                config.CreateMap <ConfigFileFeatureSetting, ChocolateyFeature>();
                config.CreateMap <ConfigFileConfigSetting, ChocolateySetting>();
                config.CreateMap <ConfigFileSourceSetting, Models.ChocolateySource>();
            });

            builder.RegisterInstance(mapperConfiguration.CreateMapper()).As <IMapper>();
            builder.Register(c => new LiteDatabase($"filename={Path.Combine(Bootstrapper.LocalAppDataPath, "data.db")};upgrade=true"))
            .SingleInstance();
        }
Ejemplo n.º 2
0
        public static IContainer RegisterAutoFac()
        {
            var builder = new ContainerBuilder();

            // Register Providers
            builder.RegisterType <VersionNumberProvider>().As <IVersionNumberProvider>().SingleInstance();

            var configurationProvider = new ChocolateyConfigurationProvider();

            builder.RegisterInstance(configurationProvider).As <IChocolateyConfigurationProvider>().SingleInstance();

            if (configurationProvider.IsChocolateyExecutableBeingUsed)
            {
                RegisterCSharpService(builder);
            }
            else
            {
                RegisterPowerShellService(builder);
            }

            // Register View Models
            builder.RegisterType <MainWindowViewModel>().As <IMainWindowViewModel>();
            builder.RegisterType <SourceViewModel>();
            builder.Register(
                (c, parameters) =>
                new SourceTabViewModel(
                    c.Resolve(
                        typeof(Lazy <>).MakeGenericType(parameters.TypedAs <Type>()),
                        new TypedParameter(typeof(Uri), parameters.TypedAs <Uri>())),
                    parameters.TypedAs <string>()));

            builder.RegisterType <SourcesControlViewModel>().As <ISourcesControlViewModel>();
            builder.RegisterType <LocalSourceControlViewModel>().As <ILocalSourceControlViewModel>();
            builder.RegisterType <RemoteSourceControlViewModel>().As <IRemoteSourceControlViewModel>();
            builder.RegisterType <PackageControlViewModel>().As <IPackageControlViewModel>();
            builder.Register(c => new PackageViewModel(c.Resolve <IPackageService>(), c.Resolve <IChocolateyPackageService>(), c.Resolve <INavigationService>())).As <IPackageViewModel>();

            // Register Services
            builder.Register((c, parameters) => new Log4NetLoggingService(parameters.TypedAs <Type>())).As <ILogService>();
            builder.RegisterType <SettingsSourceService>().As <ISourceService>().SingleInstance();
            builder.RegisterType <NavigationService>().As <INavigationService>().SingleInstance();
            builder.RegisterType <PackageService>().As <IPackageService>().SingleInstance();
            builder.RegisterType <ProgressService>().As <IProgressService>().SingleInstance();
            builder.RegisterType <PersistenceService>().As <IPersistenceService>().SingleInstance();

            // Register Views
            builder.RegisterType <MainWindow>();
            builder.RegisterType <SourcesControl>();
            builder.RegisterType <LocalSourceControl>();
            builder.Register((c, parameters) =>
                             new RemoteSourceControl(c.Resolve <IRemoteSourceControlViewModel>(parameters), c.Resolve <Lazy <INavigationService> >()));
            builder.Register((c, pvm) => new PackageControl(c.Resolve <IPackageControlViewModel>(), pvm.TypedAs <PackageViewModel>()));

            return(builder.Build());
        }