Multiprocotol Terminalprogram (BAT)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MultiTerm/MultiTerm.Core/Factories/TerminalViewModelFactory.cs

51 lines
1.9 KiB

using MultiTerm.Core.Common;
using MultiTerm.Core.ViewModel;
namespace MultiTerm.Core.Factories;
/// <summary>
/// Can create <see cref="ITerminalViewModel"/> instances during runtime.
/// </summary>
public class TerminalViewModelFactory : ITerminalViewModelFactory
{
private readonly Func<IEnumerable<ITerminalViewModel>> factory;
/// <summary>
/// Constructor of <see cref="TerminalViewModelFactory"/>.
/// </summary>
/// <param name="factory">function that gets all registered services with Interface <see cref="ITerminalViewModel"/></param>
public TerminalViewModelFactory(Func<IEnumerable<ITerminalViewModel>> factory)
{
this.factory = factory;
}
/// <summary>
/// Creates a new <see cref="ITerminalViewModel"/>.
/// </summary>
/// <param name="viewType"><see cref="TerminalViewType"/> of the new <see cref="ITerminalViewModel"/>. Must be set at creation time for all <see cref="ITerminalViewModel"/></param>
/// <param name="protocolType"><see cref="ProtocolType"/> of the new <see cref="ITerminalViewModel"/></param>
/// <returns></returns>
public ITerminalViewModel Create(TerminalViewType viewType, ProtocolType protocolType)
{
ITerminalViewModel output;
// get all registered TerminalViewModels as IEnumerable
var registeredViewModels = factory();
// search for correct type by ViewType which must be set in constructor of all TerminalViewModel Types
try
{
output = registeredViewModels.Where(x => x.ViewType == viewType).First();
}
catch (Exception ex)
{
throw new NotImplementedException($"'{nameof(TerminalViewModelFactory)}' cannot create Terminal with {nameof(TerminalViewType)} {viewType}", ex);
}
// immediately initialize protocol type
output.ProtocolType = protocolType;
// return the filled up instance
return output;
}
}