Jag hittade denna property för en stund sen när jag surfade lite. I den har man lagt till en egenskap vid namn Required. Är det något som är inbyggt i .net? Jag testade att klippa in koden in i VS men fick det inte att fungera. http://www.google.se/search?hl=sv&q=requiredattribute&meta= Det var ju riktigt nice! Speciellt det där med att man kan skapa egna attribut. Min åsikt av mappningsattribut är att de "skräpar ner" (låter mer negativt än vad jag menar) mina domänobjekt. Mappning lägger jag hellre i en extern källa, typ xml-fil som embeded resource. Mmm, jag håller nog med där just för att öka skalbarheten på systemet. Men ser du något användningsområde för attribut på egenskaper? Vi stödjer det i NPerist för att mappa tabeller o kolumner till klasser o proppar.Required] i propertyn?
[Required]
protected string X
{
get { return _X; }
set { _X = value; }
}
Kan man sätta skräddarsy sådana egenskaper på en egenskap?Sv: Required] i propertyn?
.NET Framework Class Library
RequiredAttribute Class
Defines the metadata attribute that task authors use to identify required task properties. Task properties with this attribute must have a set value when the task is run.
Namespace: Microsoft.Build.Framework
---
Men ja , man kan skriva egna attribut
public class RogerSuperduperAttribute : Attribute
{
}
[RogerSuperduper] //obs , man skriver inte "Attribute" på slutet
public void DoStuff()
Egna attribs är generellt till för att agera metadata för ev ramverk.
tex:
[ColumnMapping ("colFirstName")]
public string FirstName {get;set;}
så kan ramverket plocka ut attributet via reflection och då göra något skojigt med det.
Det finns även ett antal inbyggda attribs som påverkar kompilering / compiler warnings.
tex: [Obsolete] Sv:Required] i propertyn?
När jag såg detta så tänkte jag direkt på vilka möjligheter det öppnar upp för mappning :) Men jag kan tänka mig att vissa inte gillar att trycka in sådan metadata i sina objekt. Eller hur ser du på det?Sv: Required] i propertyn?
Sv:Required] i propertyn?
Sv: Required] i propertyn?
Dock är det inget vi förespråkar, bara att man kan göra så om man vill.
Vi har även stöd i vår AoP motor att applicera aspekter o interceptors mot attribut.
tex:
[Logged]
public void SomeMethod()
Så kan vi lägga på logger aspekter på de metoder som har det attributet (eller valfritt annat attrib)
Det finns massor av områden där attribs går att använda.
Säg att du skriver en egen serializer av något slag, då kan du ha egna attribs för att markera om proppar/fält ska serialiseras.
Tex. om du bygger någon form av serializer för att lagra objekt i viewstate på en webbsida.
public class Person
{
//markera att denna propp ska sparas i viewstate
[AddToViewState]
public string FirstName {get;set;}
//ska inte till viewstate
public string Foo {get;set;}
}