如何为mvc解耦应用程序的structuremap指定正确的配置



我正在尝试将我的第一个mvc应用程序转换为一个解耦的框架。

我有以下几层MVC Web层、控制器层、域层、服务层、数据层和共享项目

我的测试工作正常,使用了结构图,并注入了依赖关系。我的主要障碍是这个。

我正在处理一个oracle数据库,需要在运行时重新映射实体框架中包含的模式。我使用BrandonHayes适配器完成了这项工作(我对它进行了轻微修改)。

对于我的服务层测试,我模拟对象上下文,这样它就不会在真实的数据库中运行。

         private Mock<ICLObjectContext> _clmock = new Mock<ICLObjectContext>();

对于我的数据单元测试,我会这样做,这样我就可以针对我的测试数据库进行测试,并且使用事务,我可以在测试后回滚。

        //This allows us to remap the schema
        Dictionary<string,string> mappingschemas = new Dictionary<string,string>();
        mappingschemas.Add("CLAPORTAL","CLAPORTALTEST");
        mappingschemas.Add("QCTL","QTEST");
         _context = new CLObjectContext(ec, mappingschemas);
         ObjectFactory.Inject(typeof(ICLObjectContext), _context);

这很有效。问题是当我尝试真正运行应用程序时。

我不得不删除这个构造函数,只留下一个简单的0参数构造函数,这样Structuremap就可以在运行时创建对象上下文,因此不能进行任何模式映射。

因为Web项目没有引用数据层,因此对ICLObjectContext一无所知,我如何通过一些配置告诉structuremap,我想创建一个新的字典,将模式x映射到模式y,

服务层有一个对数据层的引用,所以我想我需要在那里做,因为web项目可以引用服务层。

这是对的吗?Meh我只是有点陷入困境,看不到出路。

感谢

在写出问题后,它再次帮助我想出了解决方案。

我只是创建了一个名为ISchemaResolver的接口,并将其作为共享项目的一部分。

然后,我将其放置在entityadapter类的构造函数中。

在这个web项目中,我刚刚创建了一个名为AppSettingsSchemaResolver的类,它使用应用程序设置来设置字典,然后在我连接依赖关系(即)时通过global.asax将其传入

              //Now also set up our schema mapping stuff.
  ObjectFactory.Configure(x => x.For<ISchemaResolver>().Add<AppSettingsSchemaResolver>());

最新更新