2010-09-11 42 views
0

我一直在慢慢地教導自己界面驅動編程的基礎知識,並且我正在努力讓我的腦袋圍繞關於Ninject特別是控制反轉的一些原則。基本Ninject需要的信息

可以說我有一個具體的模型類,如下...

public sealed class Host : EntityAuditable<Host, Guid> 

我有一個基類,它定義了這樣的模型方法....

public abstract class EntityAuditable<T, TKey> : 
    IEntity, 
    IDisposable, 
    IComparable<EntityAuditable<T, TKey>> 
    where T : EntityAuditable<T, TKey>, new() 

IEntity是一個定義對象屬性「Id」的非常簡單的接口。

現在對於我的主機類的構造函數將如下....

public Host(IService<Host> service) 
{ 
    this.service = service; 
    this.id = Guid.NewGuid(); 
} 

凡IService實現提供方法,堅持對象具體到服務存儲庫。

我想要做的就是提供我的基類中的一些靜態方法,這樣我可以像

Host.LoadAll(); 

編寫代碼,知道我的綁定將被正確注射。我在基類中的實現將與此類似...

public static IList<T> LoadAll() 
    { 
     T instance = new T(); 
     List<T> instances = new List<T>(instance.DataSelectAll()); 
     // Clean up the instance. 
     instance.Dispose(); 
     return instances; 
    } 

這是可能的還是我在做一些根本性的錯誤?

當我調用新的T()時,Ninject是否知道它應該調用我的參數化構造函數?

我在文檔中發現的例子(這是令人遺憾的過時的)使用內核來創建對象,但我不想在我的模型中散佈內核創建代碼。

我會在我的Global.ascx文件中做所有的綁定。

+0

感謝您的編輯。它使一切都更容易閱讀。 – 2010-09-13 22:41:42

回答

1

在回答我自己的問題後發現我的方法不正確。

剝離靜態方法,並使用我的mvc控制器的業務邏輯導致更好的分離和更清潔,更可維護的代碼。用ninject綁定所有東西要容易得多。