Lind.DDD.Repositories.EF以下简称Repositories.EF,之所以把它从Lind.DDD中拿出来,完全出于可插拔的考虑,让大家都能休会到IoC的魅力,用到哪种方法持久化,就将那个DLL放到应用程序中,完全不需要把所有持久化方式耦合到一个项目里,这也是遵循了OCP的原则,对扩展是开放的,即你可以添加其它的持久化方式,在新的项目里;而不要在原有的项目中进行代码的修改.
Repositories.EF做为数据持久化的一种方式,它直接继承了Lind.DDD.IRepositories接口模块,它实现了IRepository,IExtensionRepository和IOrderableRepository等仓储操作,开发人员在使用时,可以根据自己的需要去声明不同的接口变量,以最小程度的使用它,而不是所以时候都使用IExtensionRepository的完整接口,如你的类中只用到了实体的添加,那你完全可以把对象声明成IRepository基本仓储,这样你的使用时,也更加清楚.
Repositories.EF项目结构很简单,只有一个Repository的实现,看一下结构图
aaarticlea/png;base64,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" alt="" />
它内部使用了IExtensionRepository接口,由于IExtensionRepository同时继承了IRepository和IOrderableRepository,所以,EF在实现它时,这两个基接口也会现时被实现.
aaarticlea/png;base64,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fO89fdMmsXixNnWqNmaMdt11YtEiff16uW+fcepU1A1MBqNclvv26evWiXvu0a67Tvvxj7Vp08TixfqmTfLgQdndYQ8goeIVXYaU8t139eXLtWnTxLx5Ys4c/bHH5OuvG0eOGLoedetGA0MI48gR+dpr+mOPVa490aZN05cvlwcORN00AOpImV8AACAASURBVAgrFtElSyX92WfFnDnaOeeIuXP19euNI0eiblS3kJ98oq9bJ+bOFWPGiJtv1teulYcPR90oAAgSWXTJf/5T37xZ9PZq48aJGTP0p56S770XVWNQIQ8c0FesENOnaxdcIHp79c2bZbnceDUA6KwIokvu2yd6erSZM/WlS+XAAP8hN4aMb76Re/boDz0kZswQd9wh9+2LukUAUNe56DKGhvRnn9WuuELMny/37u3YdjFC8q23xLx52oQJ+rp1xjffRN0cAOhIdOnvvSf6+rQLL9Sfesr46qsObBEtZ3z1lb58uXbBBeLuu3WmdgFEqu3RJe67T9x5p9y1q90bQmfIN97QenvF4sVRNwRA92pjdBnHjmm//KUsjOgGs4gn+frr2uWXG3//e9QNAdCN2hVd+ksvaddcY3B92uhlnDypXX21vnlz1A0B0HXaEl36pk3673/fxIotuWMsOunA1Ve/PmNG++pv+ZsTwCjQ+uiS772n/eY3za1LV5VEYuZMeehQO2rm/QBAqfXRJXp75Z49za1LV5VEctcucddd7aiZ9wMApRZHl3HmjHbxxU2vTleVUNpFFxlnzrS8Wt4PAJRaHF3i+efFpk1Nr05XlVBi0ybx/POexeViLpsvmaV8Npsrlj1PqdlK8n4AoNSGUddFFzW9Ol1VQmm/+IXytpalfDZfcv1WUU01xQpEF4BG2nCu68475e7dza0bl66qXMxlVR1rcrVzj+SuXaKvzwwaSdXUW0B0AWheG64wPHhQzJzZ3LrZbNbTAVb6t1Je3QO2ibMHNU3frralFF1/vmQOb+f92tnGPdKmTZN//nOlRtc23GMt59aZMATQnPb8v64XXxT339/EirauytXV2h52IkS82rhVT9XumPEPgBCVjbhkcDmxeLH1v5KDoqup40d0AVBq27dpvPyydvXVw/2y3eFGl+Oje/X5Uj6by9UX10+1eD/XO1av9atWSaujdQ56HFvy1qnYfClvq6xczLl3zHMJQ5jo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X7lS9PaKWbO066/XLr1UO/dc7fzztQkTtGnTxJIlYv58sXCh6OsT990nHnhAX7pUf+wxfflyfeVKfeVKffly/bHH9KVLxQMPiPvuE319YsECMX++ePBBbdo0bcIE7fzztXPP1S69VLv+ejFrlujtFU8/ra9fL3fvNo4cMb75JuojAQCj2aiKrmDGd98ZX31lHDki33tPvvOOHBiQb74pCwW5dauez+ubNunr1+urV+urV+vr1+ubNun5vNy6VRYK8s03ZbEo33lHvveeceSI8dVXXXjtPgDERxdFFwBgdCC6AAAJQ3QBABKG6AIAJAzRBQBIGKILAJAwRBcAIGGILgBAwhBdAICEIboAAAnTjdFlfPedceqU8be/yU8+ke+/r+/bJ99+Ww4MyF275M6dslCQr70mt27VN2/WX3xR37RJ37BBX7tWX71aPP+8vnq1vnatvmGDvmmT/uKL+ubNcutW+dprslCQO3fKXbvkwIB8+239nXfk++/LTz4x/vY349QpvjgKAFpolESXoWnGyZOyVJJvvy23btVXrxZPPy3uvVfccYeYM0fMmKFdc4122WXauHFizBjt/PO1Sy/VJk3Spk0Ts2eLnh7R0yMWLhR33SXuuUfcd59YvFgsWaI/9JD+yCP6Y4/pTzyhr1ihr1wpNm3SV67UV6zQn3hCf+wx/ZFH9IceEkuWiMWLxX33iXvuEXfdJRYuFD09Wk+PmD1bmzZNmzRJu/RS7fzzxZgx2rhx2mWXaddcI2bMEHPmiDvuEPfdp//hD/rq1XLrVvn22/LwYeOf/zQ0LerDCQCxlqToMs6eNQYH5Z49ej6vP/64uOceMXu2du212vjx2tix2uWXixkzxO23iyVL9JUr9ddek9u3y7feku+9J0sl49gxo1yOdvRjfPutUS4bx47JUkm+95586y1ZKOivvqqvXCmWLBG33y6mT9cuu0wbO1YbP1679loxZ45YtEh//HH9pZfkwIDx2WfG2bMRth8AYiJe0WXdXnbxokVP9fRsmjVr57RpB66++vNLLz3zs5/9Z+zYExde+Jcrrtg5der26dPzN9747C23rOjpeaivL8I74bbDQ319K3p6np07N3/DDdunT985derHEyacuPDCs2PHnvnZzz675JIDkybtmDZt06xZT/X0LF60KOr2Qi3qvydg1IpLdBlDQ/JPf9o1ZYqo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" alt="" />
其实对于方法内部的实现,大叔之前的文章中已经介绍很多了,大叔可以自已进行查阅,之后这个Repositories.EF仓储在实现项目中不会出现,它只会通过IoC在程序运行时动态生产出来,这点大叔要清楚,不要把Repositories.EF引用到你的项目中使用,这样你的项目将会变得非常僵化,很被动,持久化无法自动切换,这点要注意!
在具体项目中使用时,我们可以通过web.config去定义你持久化的方式,在程序使用时,直接用Lind.DDD.IoC.ServiceLocator服务定位器即可.
IExtensionRepository<Task_Info> taskRepository;
public UserService()
{
taskRepository = ServiceLocator.Instance.GetService<IExtensionRepository<Task_Info>>();
taskRepository.SetDataContext(Db);
}
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<!--泛型类型注入-->
<register type="Lind.DDD.IRepositories.IRepository`1,Lind.DDD" mapTo="Lind.DDD.Repositories.EF.EFRepository`1, Lind.DDD.Repositories.EF" />
<register type="Lind.DDD.IRepositories.IExtensionRepository`1,Lind.DDD" mapTo="Lind.DDD.Repositories.EF.EFRepository`1, Lind.DDD.Repositories.EF" />
</container>
</unity>
最后,我们非常希望各位同学都学有所成...