⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mappingdocumentaggregator.cs

📁 NHibernate NET开发者所需的
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;

namespace NHibernate.Cfg.MappingSchema
{
	/// <summary>
	/// Responsible for building a list of <see cref="HbmMapping" /> objects from a range of acceptable
	/// sources.
	/// </summary>
	public class MappingDocumentAggregator
	{
		private readonly IAssemblyResourceFilter defaultFilter;
		private readonly List<HbmMapping> documents = new List<HbmMapping>();
		private readonly IMappingDocumentParser parser;

		/// <summary>
		/// Calls the greedy constructor, passing it new instances of <see cref="MappingDocumentParser" /> and
		/// <see cref="EndsWithHbmXmlFilter" />.
		/// </summary>
		public MappingDocumentAggregator()
			: this(new MappingDocumentParser(), new EndsWithHbmXmlFilter())
		{
		}

		public MappingDocumentAggregator(IMappingDocumentParser parser, IAssemblyResourceFilter defaultFilter)
		{
			if (parser == null)
				throw new ArgumentNullException("parser");

			if (defaultFilter == null)
				throw new ArgumentNullException("defaultFilter");

			this.parser = parser;
			this.defaultFilter = defaultFilter;
		}

		public void Add(HbmMapping document)
		{
			if (document == null)
				throw new ArgumentNullException("document");

			documents.Add(document);
		}

		public void Add(Stream stream)
		{
			HbmMapping document = parser.Parse(stream);
			Add(document);
		}

		public void Add(Assembly assembly, string resourceName)
		{
			if (assembly == null)
				throw new ArgumentNullException("assembly");

			using (Stream stream = assembly.GetManifestResourceStream(resourceName))
				Add(stream);
		}

		/// <summary>Adds any embedded resource streams which pass the <paramref name="filter"/>.</summary>
		/// <param name="assembly">An assembly containing embedded mapping documents.</param>
		/// <param name="filter">A custom filter.</param>
		public void Add(Assembly assembly, IAssemblyResourceFilter filter)
		{
			if (assembly == null)
				throw new ArgumentNullException("assembly");

			if (filter == null)
				throw new ArgumentNullException("filter");

			foreach (string resourceName in assembly.GetManifestResourceNames())
				if (defaultFilter.ShouldParse(resourceName))
					Add(assembly, resourceName);
		}

		/// <summary>Adds any embedded resource streams which pass the default filter.</summary>
		/// <param name="assembly">An assembly containing embedded mapping documents.</param>
		public void Add(Assembly assembly)
		{
			Add(assembly, defaultFilter);
		}

		public void Add(FileInfo file)
		{
			if (file == null)
				throw new ArgumentNullException("file");

			// TODO: Exception handling...
			// OpenRead() throws: DirectoryNotFoundException, IOException, UnauthorizedAccessException

			using (FileStream stream = file.OpenRead())
				Add(stream);
		}

		public void Add(string fileName)
		{
			// TODO: Exception handling...
			FileInfo file = new FileInfo(fileName);
			Add(file);
		}

		public IList<HbmMapping> List()
		{
			return documents.ToArray();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -