/// <summary> /// A protected factory method that does the actual work of creating the specified feed. /// </summary> /// <typeparam name="T">The type of repository to create.</typeparam> /// <param name="feedSettings">The feed settings to initialize the repository.</param> /// <returns>IRepository<Package>.</returns> /// <exception cref="System.ArgumentNullException">feedSettings</exception> /// <exception cref="System.InvalidOperationException">If no repository can be found based on the feed type.</exception> protected IRepository <Package> Create <T>(Feed feedSettings) where T : IRepository <Package> { if (feedSettings == null) { throw new ArgumentNullException(nameof(feedSettings)); } Debug.Assert(feedSettings.Type.Equals(Type, StringComparison.CurrentCultureIgnoreCase)); Logger.LogDebug($"Creating Repository named \"{feedSettings.Name}\" of type \"{feedSettings.Type}\""); var repository = ActivatorUtilities.CreateInstance <T>( ServiceProvider, feedSettings.CloneAndMergeSettings(ApplicationSettings.SettingsGroups.Find(feedSettings.SettingsGroup))); return(repository); }
public void Test_Feed_CloneAndMergeSettings() { var feed = new Feed { Name = "TestName", Type = "TestType", SettingsGroup = "TestSettingsGroup", Settings = { { "Key1", "Value1" }, { "Key2", "Value2" }, { "Key3", "Value3" } } }; var expectedSettings = new SettingsCollection { { "Key1", "Value1" }, { "Key3", "Value3" }, { "Key2", "Value2" }, { "Key4", "Value4-new" } }; var settingsGroup = new SettingsCollection { { "Key2", "Value2-new" }, { "Key3", "Value3-new" }, { "Key4", "Value4-new" } }; var sut = feed.CloneAndMergeSettings(settingsGroup); Assert.Equal(feed.Name, sut.Name); Assert.Equal(feed.Type, sut.Type); Assert.Equal(feed.SettingsGroup, sut.SettingsGroup); Assert.Equal(expectedSettings, sut.Settings); }