/// <summary>
		/// </summary>
		/// <param name="assembly"></param>
		/// <returns></returns>
		/// <exception cref="ArgumentNullException">
		/// <para><paramref name="assembly"/> is <see langword="null"/>.</para>
		/// </exception>
		public static ProgramsCache FromAssembly(Assembly assembly)
		{
			if (assembly == null)
			{
				throw new ArgumentNullException("assembly");
			}

			ProgramsCache cache = new ProgramsCache();
			cache._programs = ProgramLoader.LoadProgramsFromAssembly(assembly);
			return cache;
		}
        public VisiCalcServiceProvider()
        {
            _menuItemCheckedTracker = new NuGenMenuItemCheckedTracker();
            _toolStripAutoSizeService = new NuGenToolStripAutoSizeService();
            _windowStateTracker = new NuGenWindowStateTracker();
			_splashStarter = new SplashStarter();

			Assembly assembly = Assembly.GetExecutingAssembly();

			_operatorsCache = OperatorsCache.FromAssembly(assembly);
			_paramsCache = ParamsCache.FromAssembly(assembly);
			_programsCache = ProgramsCache.FromAssembly(assembly);
			_typesCache = TypesCache.FromAssembly(assembly);
        }