Пример #1
0
        private static Assembly GetResourceAssembly(IPersonalisationGroupCriteria criteria)
        {
            // If a criteria has an CriteriaResourceAssembly attribute applied, we load the resources from there.
            // If not, we use the criteria's type itself.
            var criteriaType = criteria.GetType();
            var criteriaResourceAssemblyAttribute = criteriaType.GetCustomAttributes(typeof(CriteriaResourceAssemblyAttribute))
                                                    .SingleOrDefault() as CriteriaResourceAssemblyAttribute;

            return(criteriaResourceAssemblyAttribute == null
                ? criteria.GetType().Assembly
                : Assembly.Load(criteriaResourceAssemblyAttribute.AssemblyName));
        }
        /// <summary>
        /// Gets an embedded resource for a given criteria, that may be from the main assembly or another one
        /// </summary>
        /// <param name="criteriaAlias">Alias of criteria</param>
        /// <param name="fileName">Name of resource</param>
        /// <returns>File stream of resource</returns>
        public ActionResult GetResourceForCriteria(string criteriaAlias, string fileName)
        {
            Mandate.ParameterNotNullOrEmpty(criteriaAlias, "criteriaAlias");
            Mandate.ParameterNotNullOrEmpty(fileName, "fileName");

            IPersonalisationGroupCriteria criteria =
                PersonalisationGroupMatcher.GetAvailableCriteria()
                .SingleOrDefault(x => x.Alias.InvariantEquals(criteriaAlias));

            if (criteria != null)
            {
                string resourceName;
                Stream resourceStream = EmbeddedResourceHelper.GetResource(criteria.GetType().Assembly, criteriaAlias + "." + fileName, out resourceName);

                if (resourceStream != null)
                {
                    return(new FileStreamResult(resourceStream, this.GetMimeType(resourceName)));
                }
            }

            return(this.HttpNotFound());
        }