46 lines
1.9 KiB
C#
46 lines
1.9 KiB
C#
using PrecastConcretePlantContracts.StoragesContracts;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using static System.Net.Mime.MediaTypeNames;
|
||
|
||
namespace PrecastConcretePlantFileImplement.Implements
|
||
{
|
||
public class BackUpInfo : IBackUpInfo
|
||
{
|
||
private readonly DataFileSingleton source;
|
||
private readonly PropertyInfo[] sourceProperties;//Во время выполнения свойства меняться не могут, так что можно получить список 1 раз
|
||
public BackUpInfo()
|
||
{
|
||
source = DataFileSingleton.GetInstance();
|
||
sourceProperties = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
|
||
}
|
||
public List<T>? GetList<T>() where T : class, new()
|
||
{
|
||
//Вытаскиваем из Singletonа хранения сведений все свойства(там только списки являются таковыми), далее находим те, которые представляют собой Generic типы
|
||
//Так как списки мы храним в List<T>, далее проверяем, что значение параметра необходимое(совпадают типы), вытаскиваем значение из экземпляра singletonа и приводим к
|
||
//типу List<T>?
|
||
var requredType = typeof(T);
|
||
return (List<T>?)sourceProperties.FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == requredType)
|
||
?.GetValue(source);
|
||
|
||
}
|
||
public Type? GetTypeByModelInterface(string modelInterfaceName)
|
||
{
|
||
var assembly = typeof(BackUpInfo).Assembly;
|
||
var types = assembly.GetTypes();
|
||
foreach (var type in types)
|
||
{
|
||
if (type.IsClass && type.GetInterface(modelInterfaceName) != null)
|
||
{
|
||
return type;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
}
|