- azurelight_sourcecode.zip
- Azurelight
- Azure
- Azurelight.sln
- Azurelight
- Azurelight
- Azurelight.ccproj
- Azurelight_WebRole
- ServiceConfiguration.cscfg
- ServiceDefinition.csdef
- Azurelight_WebRole
- AzurelightNav
|
// AzureContext.cs
//
using System;
using System.ComponentModel;
using System.Runtime.Serialization;
using Microsoft.Azure.Linq;
using System.ComponentModel.DataAnnotations;
namespace Microsoft.Azure.DomainServices {
public sealed class AzureTypeDescriptionProvider : TypeDescriptionProvider {
public AzureTypeDescriptionProvider()
: base()
{
}
public AzureTypeDescriptionProvider(TypeDescriptionProvider parentProvider)
: base(parentProvider)
{
}
public AzureTypeDescriptionProvider(TypeDescriptionProvider parentProvider, Type domainServiceType, bool isDesignTime)
: base(parentProvider) {
}
public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) {
ICustomTypeDescriptor baseTypeDescriptor = base.GetTypeDescriptor(objectType, instance);
if (typeof(Entity).IsAssignableFrom(objectType) == false) {
return baseTypeDescriptor;
}
return new AzureTypeDescriptor(objectType, baseTypeDescriptor);
}
private sealed class AzureTypeDescriptor : CustomTypeDescriptor {
private Type _entityType;
public AzureTypeDescriptor(Type entityType, ICustomTypeDescriptor parentTypeDescriptor)
: base(parentTypeDescriptor) {
_entityType = entityType;
}
public override PropertyDescriptorCollection GetProperties() {
PropertyDescriptorCollection propDescs = base.GetProperties();
PropertyDescriptor[] newPropDescs = new PropertyDescriptor[propDescs.Count + 1];
propDescs.CopyTo(newPropDescs, 0);
newPropDescs[newPropDescs.Length - 1] = new ETagPropertyDescriptor(_entityType);
return new PropertyDescriptorCollection(newPropDescs);
}
}
private sealed class ETagPropertyDescriptor : PropertyDescriptor {
private Type _entityType;
public ETagPropertyDescriptor(Type entityType)
: base("_ETag", new Attribute[] {
// new ReadOnlyAttribute(true),
new BindableAttribute(false),
new DataMemberAttribute(),
new DisplayAttribute() { AutoGenerateField = false }
}) {
_entityType = entityType;
}
public override Type ComponentType {
get {
return _entityType;
}
}
public override bool IsReadOnly {
get {
// TODO: Hack to make the GetValue hack which returns random values
// on each call work as expected.
// return true;
return false;
}
}
public override Type PropertyType {
get {
return typeof(string);
}
}
public override bool SupportsChangeEvents {
get {
return false;
}
}
public override void AddValueChanged(object component, EventHandler handler) {
}
public override bool CanResetValue(object component) {
return false;
}
public override object GetValue(object component) {
// TODO: How do we get to the parent domain service
// TODO: Hack to make the entity appear as if it changed during an update.
return Guid.NewGuid().ToString();
// return null;
}
public override void RemoveValueChanged(object component, EventHandler handler) {
}
public override void ResetValue(object component) {
throw new NotSupportedException();
}
public override void SetValue(object component, object value) {
// TODO: How do we get to the parent domain service
}
public override bool ShouldSerializeValue(object component) {
return true;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.