2012-07-20 140 views
0

我知道這個錯誤是什麼,我的問題稍有不同。無法創建抽象類或接口接口的實例類型

這是這些大腦褪色時刻之一。

我一直在讀的工作模式上Repositoy和單位這個有趣的文章:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我有這個代碼戲,現在我想調整它,所以我可以使用IoC與DI。

現在,這裏是我剛剛遇到精神空白的地方。

我改變我所有的類使用接口等於是給這個代碼片段:

    public class UnitOfWork : IDisposable 
    { 
     private SchoolContext context = new SchoolContext(); 
        private GenericRepository<Department> departmentRepository; 
        private GenericRepository<Course> courseRepository; 

        public GenericRepository<Department> DepartmentRepository 
        { 
            get 
            { 

                if (this.departmentRepository == null) 
                { 
                    this.departmentRepository = new GenericRepository<Department>(context); 
                } 
                return departmentRepository; 
            } 
        } 
    } 
} 

如何編輯這一行:

this.departmentRepository = new GenericRepository<Department>(context); 

所以我不必引用實際的類,所以我可以確保它是分離的,並避免產生語法錯誤:

Cannot create an instance of the abstract class or interface interface with type 

非常感謝adva NCE!

回答

0

簡而言之,您應該將該字段聲明爲接口類型。界面可以有一個名稱,如IGenericRepository<T>。然後類GenericRepository<T>應該實現該接口。然後你用你的IoC框架註冊這個類,它基本上告訴框架,「當我要求這個界面的一個實例時,給我一個這個類的實例」。然後,你做這樣的事情:

this.departmentRepository = InversionOfControl.Resolve<IGenericRepository<Department>>(); 

(Resolve方法有像public T Resolve<T>()簽名)