我坚持在Windows 8.1 Store应用程序中将依赖注入添加到BL / DAL层。我使用Caliburn Micro 2.0.0.0 Beta和Windows 8.1 Store应用程序。这是一个示例应用程序,我试图构建使用CM,结构复杂 - 所以有业务逻辑层,数据访问层和表示层。
CM自动处理直接在UI下引用的项目的DI;这是BLL。所以,从IBusinessInterface;能够获得BLLClass实例。但是,因为BLL / DAL没有Bootstrapper;我无法在业务层中注入DALClass实例(IDataInterface类型)。在UI项目中添加对DAL的引用将解决问题,但是无法实现分层的目的。
我尝试为库添加Bootstrapper;但是没有BootstrapperBase可以继承!
完整的源代码在此处共享 - https://www.dropbox.com/s/5dnhs2sp3za5dj6/SampleStoreCMApp.zip
答案 0 :(得分:0)
为什么添加对DAL的引用"会破坏分层的目的"?
您需要在某个地方拥有Composition Root,例如引导程序,需要知道所有必须注册的类型。
一种解决方案是将一些注册过程委托给知道DAL类型的BLL库中的类,但我不确定为什么你不能添加对DAL库的引用。
如果你正在使用Ninject或Autofac(或类似的),他们有一个模块的概念,可以从其他程序集加载(他们可以加载其他模块)。
答案 1 :(得分:0)
您还必须使用覆盖
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = base.SelectAssemblies();
//locate other dlls here, I do it in my app based on the namespace and extension
return assemblies.Concat(modules);
}