public WebSiteOverViewViewModel(string name, IisInformationController controller)
        {
            if(string.IsNullOrWhiteSpace(name)) throw new ArgumentException("name");
            if (controller == null) throw new ArgumentNullException("controller");
            Name = name;

            NumberOfApplications = controller.ListApplicaitonsForWebSite(name).Count;
            AppPoolName = controller.GetWebSite(name).ApplicationDefaults.ApplicationPoolName;
        }
        public AppPoolOverViewViewModel(string name, IisInformationController controller)
        {
            if(string.IsNullOrWhiteSpace(name)) throw new ArgumentException("name");
            if (controller == null) throw new ArgumentNullException("controller");
            Name = name;

            NumberOfWebSites = controller.ListSitesFromAppPool(Name).Count;
            NumberOfVirtualDirectories = controller.ListApplicationsFromAppPool(Name).Count;
        }
        public static IList<ApplicationOverVewViewModel> GetAll(IisInformationController controller)
        {
            List<ApplicationOverVewViewModel> apps = new List<ApplicationOverVewViewModel>();
            foreach (Site site in controller.ListWebsites())
            {
                apps.AddRange(Get(site.Name, controller));
            }

            return apps;
        }
        public static IList<ApplicationOverVewViewModel> Get(string websiteName, IisInformationController controller)
        {
            Site webSite = controller.GetWebSite(websiteName);
            if(webSite == null) throw new ArgumentOutOfRangeException("websiteName");

            return webSite.Applications.Select(app => new ApplicationOverVewViewModel()
                                                          {
                                                              Path = app.Path, AppPoolName = app.ApplicationPoolName, EnabledProtocols = app.EnabledProtocols, ParentWebsite = websiteName
                                                          }).ToList();
        }
        private IList<IisApplicationViewModel> CollateIisApps(IisInformationController controller, IList<string> appPools)
        {
            IList<IisApplicationViewModel> appOverViews = new List<IisApplicationViewModel>();
            IList<Application> apps = controller.ListApplicationsFromAppPools(appPools);
            IList<Site> sites = controller.ListSitesFromAppPools(appPools);

            foreach (Application application in apps)
            {
                appOverViews.Add(new IisApplicationViewModel() { ApplicationType = IisApplicationType.Application, Name = application.Path });
            }

            foreach (Site site in sites)
            {
                appOverViews.Add(new IisApplicationViewModel() { ApplicationType = IisApplicationType.WebSite, Name = site.Name});
            }

            return appOverViews;
        }
        private void SetAppPool()
        {
            IisInformationController controller = new IisInformationController();

            AppPools = iisInformationController.ListAppPools().Select(pool => new AppPoolOverViewViewModel(pool.Name, controller)).ToList();
            AppPool = null;
        }