71 lines
1.4 KiB
C#
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
|
|
}
|
|
}
|