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(); }
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()); }