Control Injection kann in SharePoint ganz einfach über Standard ASP.NET TagMapping realisiert werden. Wie der Name bereits sagt, kann man mit dem ASP.NET Tag-Mapping Verfahren die in ASP.NET verwendeten Tags auf beliebige Klassen mappen.
So kann man durch TagMapping einfach erreichen das alle LinkButtons (konkret Microsoft.SharePoint.WebControls.SPLinkButton) durch eigene LinkButtons austauschen.
Natürlich sollte das “eingespeiste” Control eine analoge API zum original Control haben, hierzu empfiehlt sich direkt, oder indirekt von dem original Control abgeleitet werden.
Eine eigene Ableitung von SPLinkButton könnte so aussehen:
namespace SharePoint.Control.Injection
{
public class MyLinkButton: SPLinkButton
{
#region my own rendering method...
protected override void Render(HtmlTextWriter output)
{
output.Write("[This is injected]");
base.Render(output);
}
#endregion
}
}
Die Assembly, in der sich die Klasse MyLinkButton befindet muss signiert sein und kann danach entweder in den GAC oder in den Bin Folder der entsprechenden SharePoint WebApplication verteilt werden.
Als letztes kommt der eigentliche TagMapping Teil, dieser wird in der web.config der gewünschten SharePoint WebApplication konfiguriert.
<!--Assembly als Safe Controls eintragen-->
<SafeControls>
...
...
<SafeControl Assembly="SharePoint.Injection, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=5bab42cc0538eb40"
Namespace="SharePoint.Injection" TypeName="*" Safe="True" />
</SafeControls>
<!-- Der Assemblyverweis -->
<assemblies>
...
...
<add assembly="SharePoint.Injection,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=5bab42cc0538eb40"/>
</assemblies>
<!-- Das TagMapping -->
<pages>
...
...
<tagMapping>
<add tagType="Microsoft.SharePoint.WebControls.SPLinkButton,
Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c"
mappedTagType="SharePoint.Injection.MySPLink,
SharePoint.Injection, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=5bab42cc0538eb40"/>
</tagMapping>
</pages>
Nachdem die Änderungen in der SharePoint web.config gespeichert wurden, wird automatisch der ApplicationPool der bearbeiteten SharePoint WebApplication recycled.
Die vollzogenen Änderungen sind bereits nach dem ersten Request sichtbar
Mit ASP.NET TagMapping kann man auch im SharePoint mit wenig Aufwand vieles ändern, was sonst zeitintensives Custom Development benötigt.
Natürlich ist diese SPLinkButton Implementierung nur ein einfaches Beispiel…