我正在尝试将我的第一个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项目可以引用服务层。
这会是对的吗?嗯,我刚刚陷入困境,无法找到出路。
由于
答案 0 :(得分:0)
那么,在写出问题之后,再一次,它帮助我找到了解决方案。
我只是创建了一个名为ISchemaResolver的接口,并使其成为共享项目的一部分。
然后我把它放在我的entityadapter类的构造函数中。
在Web项目中,我刚刚创建了一个名为AppSettingsSchemaResolver的类,它使用应用程序设置来设置字典,然后通过global.asax传递它,当我连接我的依赖项时,即
//Now also set up our schema mapping stuff.
ObjectFactory.Configure(x => x.For<ISchemaResolver>().Add<AppSettingsSchemaResolver>());