среда, 20 апреля 2011 г.

Регистрация своего VirtualPathProvider из Feature activation

Для регистрации своего VirtualPathProvider из Feature activation на понадобиться собственно какая нибудь фича, желательно со scope="WebApplication"
Выглядит это так:

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace QpmWcfSupport
{
    public class FeatureActivation : SPFeatureReceiver
    {
        #region Private Members
        SPWebApplication _chosenWebApp = null;
        #endregion
        #region Implementation Of SPFeatureReceiver
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            Init(properties);
            WcfSupport(true);
        }
        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            Init(properties);
            WcfSupport(false);
        }
        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        {
        }
        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        {
        }
        #endregion
        #region Private Methods
        private void Init(SPFeatureReceiverProperties properties)
        {
            SPFeature feature = properties.Feature;
            SPSite siteCollection = properties.Feature.Parent as SPSite;
            if (siteCollection == null)
            {
                SPWeb web = properties.Feature.Parent as SPWeb;
                if (web != null)
                    _chosenWebApp = web.Site.WebApplication;
                else
                    _chosenWebApp = properties.Feature.Parent as SPWebApplication;
            }
            else
                _chosenWebApp = siteCollection.WebApplication;
        }
        private void WcfSupport(bool add)
        {
            ModifcationEntry wcfEntry = GetWCFSupportEntry();
            SPWebConfigModification modification = CreateModification(wcfEntry);
            if (add)
            {
                this._chosenWebApp.WebConfigModifications.Add(modification);
            }
            else
            {
                this._chosenWebApp.WebConfigModifications.Remove(modification);
            }
            this._chosenWebApp.Farm.Services.GetValue().ApplyWebConfigModifications();
            this._chosenWebApp.Update();
        }
        private SPWebConfigModification CreateModification(ModifcationEntry modEntry)
        {
            SPWebConfigModification mod = new SPWebConfigModification(modEntry.Name, modEntry.Path);
            mod.Owner = "MyCompany";
            mod.Sequence = 0;
            mod.Type = modEntry.ModType;
            mod.Value = modEntry.Value;
            return mod;
        }
        private ModifcationEntry GetWCFSupportEntry()
        {
            ModifcationEntry wcfEntry = new ModifcationEntry();
            wcfEntry.Name = "add[@name='WCFSupport']";
            wcfEntry.Path = "configuration/system.web/httpModules";
            wcfEntry.Value = "";
            wcfEntry.ModType = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
            return wcfEntry;
        }
        #endregion
    }
}

Комментариев нет:

Отправить комментарий