|
|
|
|
|
by macca321
5172 days ago
|
|
Once you start thinking of your object model as data, you can do amazing things. Want to find all the types in your system that implement an interface and spin them up? var rules =
AppDomain.CurrentDomain.GetAssemblies
.SelectMany(a => a.GetTypes())
.Where(t => typeof(ISecurityRule).IsAssignableFrom(t))
.Select(t => Activator.CreateInstance() as ISecurityRule)
.OrderBy(r => r.Priority);
You can then run a chain of responsibility by writing var allowed = rules.First(r => r.Check(someObject) != null);
//Check returns null when a rule isn't relevant to the object being checked
it's pretty sweet for metaprogramming when you can run queries against your codebase |
|
Java has AOP and extensively use Annotations (Attributes in .NET) and the approach there is definitely heavier than what you wrote above.