У меня есть интерфейсАбстрактные классы C#
using ClassAbstractFactory;
public interface IPlugin
{
AbstractFactory GetFactory();
}
и AbstractFactory
public abstract class AbstractFactory
{
public abstract AbstractCake CreateCake();
public abstract AbstractBox CreateBox();
}
public abstract class AbstractCake
{
public abstract void Interact(AbstractBox box);
}
public abstract class AbstractBox
{
}
и у меня есть файл .dll, который унаследует AbstractCake
public class ChocolateCake : AbstractCake
{
private bool _isPacked;
private bool _isDecorated;
private string _nameOfCake;
public ChocolateCake()
{
_isPacked = false;
_isDecorated = false;
_nameOfCake = "Шоколадный";
}
public bool IsPacked
{
get { return _isPacked; }
}
public bool IsDecorated
{
get { return _isDecorated; }
}
public string NameOfCake { get; set; }
public override void Interact(AbstractBox box)
{
_isPacked = true;
}
}
загружает DLL, как это:
public IPlugin LoadAssembly(string assemblyPath)
{
Assembly ptrAssembly = Assembly.LoadFile(assemblyPath);
foreach (Type item in ptrAssembly.GetTypes())
{
if (!item.IsClass) continue;
if (item.GetInterfaces().Contains(typeof(IPlugin)))
{
return (IPlugin)Activator.CreateInstance(item);
}
}
throw new Exception("Invalid DLL, Interface not found!");
}
List<IPlugin> list = new List<IPlugin>();
foreach (var assemblyPath in GetPathsListToDll())
{
list.Add(LoadAssembly(assemblyPath));
}
Как я могу Асесс атрибуты в моем шоколадном торте, чтобы использовать их как
foreach (var str in list)
{
Boolean a = str.GetFactory().GetCake().CreateCake().IsPacked;
}
или как это
string a = str.GetFactory().GetCake().CreateCake().NameOfCake;
или например
str.GetFactory().GetCake().CreateCake().NameOfCake("Something");
или как этот
str.GetFactory().GetCake().CreateCake().IsDecorated(true);
"Право" способ сделать это 'AbstractCake' должен иметь' IsPacked', 'IsDecorated' и' NameOfCake' определяется как абстрактные свойства/методы в нем. –