鑑於在鹼庫中定義的下列類/接口:C#通用傳承問題與架庫
public interface IWorkContext {
T Node<T>() where T : class, IHierachy<T>;
IHierachyItem Node();
}
public interface IHierachyItem {
int Id { get; set; }
string Title { get; set; }
}
public interface IHierachy<T> : IHierachyItem where T : IHierachy<T> {
T Parent { get; set; }
IList<T> Children { get; set; }
}
public class WorkContext {
public static IWorkContext Current {
get { return DependencyResolver.Current.GetService<IWorkContext>(); }
}
}
其中有另一個庫內部以下implentation(引用上面的基本庫):
public class DefaultWorkContext : IWorkContext {
// Nhibernate session
private readonly ISession _session;
public DefaultWorkContext(ISession session) {
_session = session;
}
public T Node<T>() where T : class, IHierachy<T> {
return _session.Get<T>(2);
}
public IHierachyItem Node() {
return Node<SiteMapNode>();
}
}
在哪裏的SiteMapNode在相同的庫中存在(以及被映射到數據庫表):
public class SiteMapNode : IHierachy<SiteMapNode> {
public virtual int Id { get; set; }
public virtual SiteMapNode Parent { get; set; }
public virtual string Title { get; set; }
public virtual IList<SiteMapNode> Children { get; set; }
public SiteMapNode() {
Children = new List<SiteMapNode>();
}
}
我可以說下面的訪問節點和獲取父:
var node = WorkContext.Current.Node();
var parentNode = ((IHierachy<SiteMapNode>)node).Parent;
var node2 = WorkContext.Current.Node<SiteMapNode>();
var parentNode2 = node2.Parent;
但是我不喜歡這兩種方法作爲選項1需要的情況和選擇2要求我傳遞一個默認類型。
是否有可能重構此示例,以便我可以像訪問ID和標題一樣訪問父級和子級。
我希望我已經解釋清楚了這個問題。我會很感激的幫助。謝謝
一般來說,展示你想問的條件的最簡單的例子是更好的... –