我正在尝试将我的第一个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>());