Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. public interface IWorkContext {
  2. T Node<T>() where T : class, IHierachy<T>;
  3. IHierachyItem Node();
  4. }
  5.  
  6. public interface IHierachyItem {
  7. int Id { get; set; }
  8. string Title { get; set; }
  9. }
  10.  
  11. public interface IHierachy<T> : IHierachyItem where T : IHierachy<T> {
  12. T Parent { get; set; }
  13. IList<T> Children { get; set; }
  14. }
  15.  
  16. public class WorkContext {
  17. public static IWorkContext Current {
  18. get { return DependencyResolver.Current.GetService<IWorkContext>(); }
  19. }
  20. }
  21.  
  22. public class DefaultWorkContext : IWorkContext {
  23. // Nhibernate session
  24. private readonly ISession _session;
  25.  
  26. public DefaultWorkContext(ISession session) {
  27. _session = session;
  28. }
  29.  
  30. public T Node<T>() where T : class, IHierachy<T> {
  31. return _session.Get<T>(2);
  32. }
  33.  
  34. public IHierachyItem Node() {
  35. return Node<SiteMapNode>();
  36. }
  37. }
  38.  
  39. public class SiteMapNode : IHierachy<SiteMapNode> {
  40. public virtual int Id { get; set; }
  41. public virtual SiteMapNode Parent { get; set; }
  42. public virtual string Title { get; set; }
  43. public virtual IList<SiteMapNode> Children { get; set; }
  44.  
  45. public SiteMapNode() {
  46. Children = new List<SiteMapNode>();
  47. }
  48. }
  49.  
  50. var node = WorkContext.Current.Node();
  51. var parentNode = ((IHierachy<SiteMapNode>)node).Parent;
  52.  
  53. var node2 = WorkContext.Current.Node<SiteMapNode>();
  54. var parentNode2 = node2.Parent;
  55.  
  56. public inetrface IHierarchy : IHierarchyItem
  57. {
  58. IHierarchy Parent { get; set; }
  59. IList<IHierarchy> Children { get; set; }
  60. }
  61.  
  62. public interface IHierarchy<T> : IHierarchy // Implies IHierarchyItem
  63. where T : IHierarchy<T>
  64. { ... } // As you had it.
  65.  
  66. public SiteMapNode : IHierarchy<SiteMapNode> // Implies IHierarchy
  67. {
  68. private SiteMapNode _Parent;
  69. private IList<SiteMapNode> _Children;
  70.  
  71. // Implicit implement of IHierarchyItem and members of SiteMapNode itself.
  72. int Id { get; set; }
  73. string Title { get; set; }
  74.  
  75. // Implicit implementation of IHierarchy<SiteMapNode> members
  76. // These are also members of SiteMapNode itself.
  77.  
  78. SiteMapNode Parent
  79. {
  80. get { return _Parent; }
  81. set { _Parent = value; }
  82. }
  83.  
  84. IList<SiteMapNode> Children
  85. {
  86. get return _Children;
  87. set _Children = value;
  88. }
  89.  
  90. // Explicit implementation of IHierarchy members
  91. // The interface prefix is required to distinguish these from the
  92. // type-specific members above to declare different return types.
  93.  
  94. IHierarchy IHierarchy.Parent
  95. {
  96. get { return _Parent; } // Might need (IHierarchy) cast
  97. set { Parent = (SiteMapNode)value; }
  98. }
  99.  
  100. IList<IHierarchy> IHierarchy.Children
  101. {
  102. get { return _Children; } // Might need (IList<IHierarchy>) cast
  103. set { _Children = (IList<SiteMapNode>)value; }
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement