JD2022-TU1/main/tools/framework/JD.Reflection/Interfaces/ExportFactory.cs

71 lines
1.4 KiB
C#

using System;
using JD.Kernel.StaticHelpers;
namespace JD.Reflection.Interfaces
{
/// <summary>
/// Allows an import that creates an indefinite amount of the exported object.
/// </summary>
public class ExportFactory<T>
{
#region Variables
private readonly Func<T> m_creator;
#endregion
#region Constructor
internal ExportFactory(Func<T> creator)
{
Throw.IfNull(creator, "creator");
m_creator = creator;
}
#endregion
#region Methods
/// <summary>
/// Creates an instance of the exported object.
/// </summary>
/// <returns></returns>
public T Create()
{
return m_creator();
}
#endregion
}
/// <summary>
/// Allows an import that creates an indefinite amount of the exported object, with access to metadata.
/// </summary>
public class ExportFactory<T, TMetadata> : ExportFactory<T>
{
#region Variables
private readonly TMetadata m_metadata;
#endregion
#region Constructor
internal ExportFactory(Func<T> creator, TMetadata metadata)
: base(creator)
{
m_metadata = metadata;
}
#endregion
#region Properties
public TMetadata Metadata
{
get { return m_metadata; }
}
#endregion
}
}