首先,我有一個定義爲public class DatabaseFactory : Disposable, IDatabaseFactory
的dbcontext工廠,它只是創建一個上下文(如果尚不存在的話)。如何使用ninject將單個工廠實例注入到多個存儲庫和工作單元?
接下來,我有一個定義爲public class Repository<T> : IRepository<T> where T : class
的通用存儲庫,它在構造函數中使用該工廠。我有其他具體的存儲庫,從這個存儲庫繼承。
我還有一個定義爲public class UnitOfWork : IUnitOfWork
的工作單元類,它在構造函數中接受工廠並保存工廠內上下文的所有更改(所有存儲庫都應該使用該類)。
在我的控制器中,我將構造函數設置爲public ProjectController(IDatabaseFactory factory, IUnitOfWork unitOfWork, IProjectRepository projectRep, IUserRepository userRep)
。
基本上,我需要將工廠的相同實例傳遞給工作單元和所有存儲庫。使用ninject,它會爲每個對象創建一個新工廠,而不是將一個實例全部傳遞給它們。有沒有辦法只允許單個實例通過ninject傳遞還是我沒有正確創建我的工廠和/或不正確理解ninject?
以下是ninject我綁定:
kernel.Bind<IProjectRepository>().To<ProjectRepository>();
kernel.Bind<IIssueRepository>().To<IssueRepository>();
kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
真的嗎?我試圖在過去一個半小時內尋找答案。這正是我所期待的。我不知道爲什麼很難通過谷歌找到答案。也許我試圖讓它比現在困難得多。再次感謝! – snoluet 2012-01-31 16:28:58
如果你發現我的帖子有用,你可以接受它作爲答案:) – MonkeyCoder 2012-01-31 16:30:53
我會 - 你回答得太快,現在我必須等待4分鐘:)謝謝。快速的問題,如果你有第二個,如果我把工廠作爲單身 - 它會創建一個單一的實例應用程序範圍內,或只在當前的控制器?如果我想爲IssueController的工廠的另一個實例比ProjectController(但它在該特定控制器中的單個實例),將不會爲我照顧這件事? – snoluet 2012-01-31 16:31:54