We have several domain objects which need to support both read-only and read-write modes; they currently have a bool Locked
property for this--when Locked
attempts to alter properties on the object result in an InvalidOperationException
. The default state for the objects is Locked.
The object-initialization syntax of C# 3 introduces a small issue with these, in that the object must be unlocked (or default to be unlocked) during initialization and then locked explicityly at the end.
When using C# 3's object initialization syntax is there a means of receiving notification that the object is being intitialized or that initialization is complete? System.ComponentModel.ISupportInitialize
was my best hope, but it doesn't get called.
You could use a fluent API and append it:
var obj = new MyType { Id = 123, Name = "abc"}.Freeze();
where the Freeze
method returns the same instance (fluent) - something like:
class MyType {
private bool isFrozen;
public MyType Freeze() {
isFrozen = true;
return this;
}
protected void ThrowIfFrozen() {
if (isFrozen) throw new InvalidOperationException("Too cold");
}
private int id;
public int Id {
get { return id; }
set { ThrowIfFrozen(); id = value; }
}
private string name;
public string Name {
get { return name; }
set { ThrowIfFrozen(); name = value; }
}
}
(you could centralize the check a bit more if needed)
No, there is no such notification mechanism. The object initializer feature will simply call the specified constructor and then set the accessible fields / properties in the order they are listed. There is no interface available which supports notifications for this feature.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With