/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="PageLevelNavigationViewComponentBase{T}"/> with necessary dependencies. /// </summary> protected PageLevelNavigationViewComponentBase( ITopicRepository topicRepository, IHierarchicalTopicMappingService<T> hierarchicalTopicMappingService ) : base( topicRepository, hierarchicalTopicMappingService ) {}
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="MenuViewComponentBase{T}"/> with necessary dependencies. /// </summary> /// <returns>A topic controller for loading OnTopic views.</returns> public PageLevelNavigationViewComponent( ITopicRepository topicRepository, IHierarchicalTopicMappingService<NavigationTopicViewModel> hierarchicalTopicMappingService ) : base( topicRepository, hierarchicalTopicMappingService ) {}
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Establishes a new instance of the <see cref="SampleControllerFactory"/>, including any shared dependencies to be used /// across instances of controllers. /// </summary> /// <remarks> /// The constructor is responsible for establishing dependencies with the singleton lifestyle so that they are available /// to all requests. /// </remarks> public SampleActivator(string connectionString) { /*------------------------------------------------------------------------------------------------------------------------ | Initialize Topic Repository \-----------------------------------------------------------------------------------------------------------------------*/ var sqlTopicRepository = new SqlTopicRepository(connectionString); var cachedTopicRepository = new CachedTopicRepository(sqlTopicRepository); _ = new PageTopicViewModel(); /*------------------------------------------------------------------------------------------------------------------------ | Preload repository \-----------------------------------------------------------------------------------------------------------------------*/ _topicRepository = cachedTopicRepository; _typeLookupService = new DynamicTopicViewModelLookupService(); _topicMappingService = new TopicMappingService(_topicRepository, _typeLookupService); _ = _topicRepository.Load(); /*------------------------------------------------------------------------------------------------------------------------ | Establish hierarchical topic mapping service \-----------------------------------------------------------------------------------------------------------------------*/ _hierarchicalMappingService = new CachedHierarchicalTopicMappingService<NavigationTopicViewModel>( new HierarchicalTopicMappingService<NavigationTopicViewModel>( _topicRepository, _topicMappingService ) ); }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="CourseListViewComponent"/> with necessary dependencies. /// </summary> public CourseListViewComponent( ITopicRepository topicRepository, IHierarchicalTopicMappingService<TrackedNavigationTopicViewModel> hierarchicalTopicMappingService ) : base( topicRepository, hierarchicalTopicMappingService ) { }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a Topic Controller with necessary dependencies. /// </summary> /// <returns>A topic controller for loading OnTopic views.</returns> protected LayoutControllerBase( ITopicRoutingService topicRoutingService, IHierarchicalTopicMappingService<T> hierarchicalTopicMappingService ) : base() { _topicRoutingService = topicRoutingService; HierarchicalTopicMappingService = hierarchicalTopicMappingService; }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="NavigationTopicViewComponentBase{T}"/> with necessary dependencies. /// </summary> /// <returns>A topic <see cref="NavigationTopicViewComponentBase{T}"/>.</returns> protected NavigationTopicViewComponentBase( ITopicRepository topicRepository, IHierarchicalTopicMappingService<T> hierarchicalTopicMappingService ) { TopicRepository = topicRepository; HierarchicalTopicMappingService = hierarchicalTopicMappingService; }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Establishes a new instance of the <see cref="GoldSimActivator"/>, including any shared dependencies to be used /// across instances of controllers. /// </summary> /// <remarks> /// The constructor is responsible for establishing dependencies with the singleton lifestyle so that they are available /// to all requests. /// </remarks> public GoldSimActivator(IConfiguration configuration, IWebHostEnvironment webHostEnvironment) { /*------------------------------------------------------------------------------------------------------------------------ | Verify dependencies \-----------------------------------------------------------------------------------------------------------------------*/ Contract.Requires(configuration, nameof(configuration)); Contract.Requires(webHostEnvironment, nameof(webHostEnvironment)); /*------------------------------------------------------------------------------------------------------------------------ | SAVE STANDARD DEPENDENCIES \-----------------------------------------------------------------------------------------------------------------------*/ _configuration = configuration; _webHostEnvironment = webHostEnvironment; var connectionString = configuration.GetConnectionString("OnTopic"); var sqlTopicRepository = new SqlTopicRepository(connectionString); var cachedTopicRepository = new CachedTopicRepository(sqlTopicRepository); /*------------------------------------------------------------------------------------------------------------------------ | PRELOAD REPOSITORY \-----------------------------------------------------------------------------------------------------------------------*/ _topicRepository = cachedTopicRepository; _typeLookupService = new CompositeTypeLookupService( new GoldSimTopicViewModelLookupService(), new TopicViewModelLookupService(), new EditorViewModelLookupService() ); _topicMappingService = new TopicMappingService(_topicRepository, _typeLookupService); _topicRepository.Load(); /*------------------------------------------------------------------------------------------------------------------------ | INITIALIZE EDITOR COMPOSER \-----------------------------------------------------------------------------------------------------------------------*/ _standardEditorComposer = new(_topicRepository, _webHostEnvironment); /*------------------------------------------------------------------------------------------------------------------------ | CONSTRUCT SMTP CLIENT \-----------------------------------------------------------------------------------------------------------------------*/ var postmarkApiKey = _configuration.GetValue<string>("Postmark:ApiKey"); var postmarkClient = new PostmarkClient(postmarkApiKey); _smtpService = new PostmarkSmtpService(postmarkClient); /*------------------------------------------------------------------------------------------------------------------------ | CONSTRUCT HIERARCHICAL TOPIC MAPPING SERVICES \-----------------------------------------------------------------------------------------------------------------------*/ _hierarchicalTopicMappingService = new CachedHierarchicalTopicMappingService<Models.NavigationTopicViewModel>( new HierarchicalTopicMappingService<Models.NavigationTopicViewModel>( _topicRepository, _topicMappingService ) ); _coursewareTopicMappingService = new CachedHierarchicalTopicMappingService<TrackedNavigationTopicViewModel>( new HierarchicalTopicMappingService<TrackedNavigationTopicViewModel>( _topicRepository, _topicMappingService ) ); }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Establishes a new instance of the <see cref="SampleControllerFactory"/>, including any shared dependencies to be used /// across instances of controllers. /// </summary> public SampleControllerFactory() : base() { /*------------------------------------------------------------------------------------------------------------------------ | ESTABLISH DATABASE CONNECTION \-----------------------------------------------------------------------------------------------------------------------*/ var connectionString = ConfigurationManager.ConnectionStrings["OnTopic"].ConnectionString; var sqlTopicRepository = new SqlTopicRepository(connectionString); /*------------------------------------------------------------------------------------------------------------------------ | SAVE STANDARD DEPENDENCIES \-----------------------------------------------------------------------------------------------------------------------*/ _topicRepository = new CachedTopicRepository(sqlTopicRepository); _typeLookupService = new TopicViewModelLookupService(); _topicMappingService = new TopicMappingService(_topicRepository, _typeLookupService); _rootTopic = _topicRepository.Load(); /*------------------------------------------------------------------------------------------------------------------------ | CONSTRUCT HIERARCHICAL TOPIC MAPPING SERVICE \-----------------------------------------------------------------------------------------------------------------------*/ var service = new HierarchicalTopicMappingService <NavigationTopicViewModel>( _topicRepository, _topicMappingService ); _hierarchicalTopicMappingService = new CachedHierarchicalTopicMappingService <NavigationTopicViewModel>( service ); }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="MenuViewComponentBase{T}"/> with necessary dependencies. /// </summary> /// <returns>A topic controller for loading OnTopic views.</returns> public MenuViewComponent( ITopicRoutingService topicRoutingService, IHierarchicalTopicMappingService<NavigationTopicViewModel> hierarchicalTopicMappingService ) : base( topicRoutingService, hierarchicalTopicMappingService ) {}
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a Topic Controller with necessary dependencies. /// </summary> /// <returns>A topic controller for loading OnTopic views.</returns> public LayoutController( ITopicRoutingService topicRoutingService, IHierarchicalTopicMappingService<NavigationTopicViewModel> navigationMappingService ) : base( topicRoutingService, navigationMappingService ) { }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a <see cref="MenuViewComponentBase{T}"/> with necessary dependencies. /// </summary> protected MenuViewComponentBase( ITopicRepository topicRepository, IHierarchicalTopicMappingService<T> hierarchicalTopicMappingService ) : base( topicRepository, hierarchicalTopicMappingService ) { }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of a Topic Controller with necessary dependencies. /// </summary> /// <returns>A topic controller for loading OnTopic views.</returns> public LayoutController( ITopicRoutingService topicRoutingService, IHierarchicalTopicMappingService<NavigationTopicViewModel> hierarchicalTopicMappingService, ITopicRepository topicRepository ) : base( topicRoutingService, hierarchicalTopicMappingService ) { _topicRepository = topicRepository; }
/*========================================================================================================================== | CONSTRUCTOR \-------------------------------------------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of the <see cref="TopicControllerTest"/> with shared resources. /// </summary> /// <remarks> /// This uses the <see cref="StubTopicRepository"/> to provide data, and then <see cref="CachedTopicRepository"/> to /// manage the in-memory representation of the data. While this introduces some overhead to the tests, the latter is a /// relatively lightweight façade to any <see cref="ITopicRepository"/>, and prevents the need to duplicate logic for /// crawling the object graph. In addition, it initializes a shared <see cref="Topic"/> reference to use for the various /// tests. /// </remarks> public TopicViewComponentTest() { /*------------------------------------------------------------------------------------------------------------------------ | Establish dependencies \-----------------------------------------------------------------------------------------------------------------------*/ _topicRepository = new CachedTopicRepository(new StubTopicRepository()); _topic = _topicRepository.Load("Root:Web:Web_3:Web_3_0")!; _topicMappingService = new TopicMappingService(_topicRepository, new TopicViewModelLookupService()); /*------------------------------------------------------------------------------------------------------------------------ | Establish hierarchical topic mapping service \-----------------------------------------------------------------------------------------------------------------------*/ _hierarchicalMappingService = new CachedHierarchicalTopicMappingService<NavigationTopicViewModel>( new HierarchicalTopicMappingService<NavigationTopicViewModel>( _topicRepository, _topicMappingService ) ); /*------------------------------------------------------------------------------------------------------------------------ | Establish view model context \-----------------------------------------------------------------------------------------------------------------------*/ var routes = new RouteData(); routes.Values.Add("rootTopic", "Web"); routes.Values.Add("path", "Web_3/Web_3_0"); var viewContext = new ViewContext() { HttpContext = new DefaultHttpContext(), RouteData = routes }; var viewComponentContext = new ViewComponentContext() { ViewContext = viewContext }; _context = viewComponentContext; }