C# Windows 8.1应用商店应用程序中BL/DAL上的Caliburn Micro+DI

C# Windows 8.1应用商店应用程序中BL/DAL上的Caliburn Micro+DI,c#,windows-8,dependency-injection,windows-8.1,caliburn.micro,C#,Windows 8,Dependency Injection,Windows 8.1,Caliburn.micro,在我的Windows8.1商店应用程序中,我一直在为BL/DAL层添加依赖注入。我正在使用Caliburn Micro 2.0.0.0测试版和Windows 8.1应用商店。这是我试图使用CM构建的一个示例应用程序,具有复杂的结构,因此有一个业务逻辑层、数据访问层和表示层 构型管理自动负责UI下直接引用项目的DI;这是BLL。因此,从IBusinesInterface;我能够获得BLLClass实例。但是,由于BLL/DAL没有引导程序;我无法在业务层中注入DALClass实例IDataInte

在我的Windows8.1商店应用程序中,我一直在为BL/DAL层添加依赖注入。我正在使用Caliburn Micro 2.0.0.0测试版和Windows 8.1应用商店。这是我试图使用CM构建的一个示例应用程序,具有复杂的结构,因此有一个业务逻辑层、数据访问层和表示层

构型管理自动负责UI下直接引用项目的DI;这是BLL。因此,从IBusinesInterface;我能够获得BLLClass实例。但是,由于BLL/DAL没有引导程序;我无法在业务层中注入DALClass实例IDataInterface类型。在UI项目中添加对DAL的引用可以解决这个问题,但无法达到分层的目的

我尝试为库添加引导程序;但是没有可从中继承的BootstrapperBase


完整的源代码在这里共享-

为什么添加对DAL的引用会破坏分层的目的

您需要在某个地方注册,例如引导程序,并且需要了解必须注册的所有类型

一种解决方案是将一些注册过程委托给BLL库中了解DAL类型的类,但我不确定为什么不能添加对DAL库的引用


如果您使用的是Ninject或Autofac或类似产品,他们有一个模块概念,可以从其他程序集加载,他们可以加载其他模块。

您还必须使用覆盖

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);

        }