using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
namespace Systin.Library{
public sealed class DllLoader : ILoader
{
#region Fields
private string _mFileName;
private FileInfo _mFileHandle;
private Assembly mAssembly;
public Assembly LanguageAssembly
{
get { return mAssembly; }
}
private LanguageDriverClassManager mLanguageDriverClassManager;
public LanguageDriverClassManager LanguageDriverClassManager
{
get { return mLanguageDriverClassManager; }
}
#endregion
#region Constructors
private DllLoader() {
this._mFileName = "";
}
#endregion
#region Public Static Methods
/// <summary>
/// Factories this instance.
/// </summary>
/// <returns></returns>
private static DllLoader Factory()
{
//Create a new Instance of Loader
return new DllLoader();
}
/// <summary>
/// Loads the DLL.
/// </summary>
/// <param name="libraryDll">The library DLL.</param>
/// <returns>DllLoader</returns>
/// <exception cref="System.BadImageFormatException">Thrown if path to dll file is not a correct dll</exception>
public static DllLoader LoadDll(FileSystemInfo libraryDll)
{
if(libraryDll == null){
throw new ArgumentNullException("libraryDll");
}
//Load the dll into memory from the file location provided
Assembly assembly = Assembly.LoadFile(libraryDll.FullName);
//Creates a new instance of dllLoader for the given assembly object
DllLoader loader = DllLoader.Factory(assembly);
return loader;
}
#endregion
#region Private Static Regions
/// <summary>
/// Factories the specified assembly.
/// </summary>
/// <param name="assembly">The assembly.</param>
/// <returns></returns>
private static DllLoader Factory(Assembly assembly)
{
DllLoader loader = DllLoader.Factory();
FileInfo file = new FileInfo(assembly.Location);
LanguageDriverClassManager ldcm = LanguageDriverClassManager.Factory(assembly);
loader.mLanguageDriverClassManager = ldcm;
loader._mFileName = file.Name;
loader.mAssembly = assembly;
loader._mFileHandle = file;
return loader;
}
#endregion
#region ILoader Members
public FileInfo FileHandle
{
get { return this._mFileHandle; }
}
public string FileName
{
get { return this._mFileName; }
}
#endregion
}
}
|