static App() { var catalog = new AssemblyCatalog(typeof(App).Assembly); var builder = new ContainerBuilder(); builder.RegisterComposablePartCatalog(catalog); builder .Register(_ => App.Current) .As <Application>() .ExternallyOwned() .InstancePerLifetimeScope(); builder .Register(b => new MainViewModel()) .OnActivating(e => { e.Instance.StartCommand = e.Context.Resolve <StartCommand>(); e.Instance.StopCommand = e.Context.Resolve <StopCommand>(); e.Instance.SearchCommand = e.Context.Resolve <SearchCommand>(); }) .AsSelf() .InstancePerLifetimeScope(); builder .Register(b => YouTrackManager.GetConnection("youtrack.neveling.net", "testuser", "testuser")) .As <IConnection>() .InstancePerLifetimeScope(); builder .Register(b => new IssueManagement(b.Resolve <IConnection>())) .AsSelf() .InstancePerLifetimeScope(); builder .RegisterType(typeof(YouTrackRepository)) .As(typeof(IRepository <string, IRepositoryPayload>)) .InstancePerLifetimeScope(); builder .RegisterType <YouTrackPayload>() .OnActivated(e => e.Instance.Repository = e.Context.Resolve <IRepository <string, IRepositoryPayload> >()) .As <IRepositoryPayload>() .InstancePerDependency(); builder .RegisterType <StartCommand>() .OnActivated(e => { e.Instance.MainViewModel = e.Context.Resolve <MainViewModel>(); e.Instance.StartEventFactory = () => new TrakkrEventViewModel { Type = EventType.Start, Timestamp = DateTime.Now, Payload = Container.Resolve <IRepositoryPayload>() }; }) .AsSelf() .InstancePerLifetimeScope(); builder .RegisterType <StopCommand>() .OnActivated(e => { e.Instance.MainViewModel = e.Context.Resolve <MainViewModel>(); e.Instance.StopEventFactory = () => new TrakkrEventViewModel { Type = EventType.Stop, Timestamp = DateTime.Now, Payload = Container.Resolve <IRepositoryPayload>() }; }) .AsSelf() .InstancePerLifetimeScope(); builder .RegisterType <SearchCommand>() .OnActivated(e => { e.Instance.MainViewModel = e.Context.Resolve <MainViewModel>(); e.Instance.Repositroy = e.Context.Resolve <IRepository <string, IRepositoryPayload> >(); }) .AsSelf() .InstancePerLifetimeScope(); Container = builder.Build(); }