0

我正在尝试将我的第一个 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 一无所知,我如何告诉结构映射,通过一些配置,我想创建一个新字典,将模式 x 映射到模式 y,

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

这会是对的吗?嗯,我刚刚让自己陷入困境,看不到出路。

谢谢

4

1 回答 1

0

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

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

然后我将它放在我的 entityadapter 类的构造函数中。

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

              //Now also set up our schema mapping stuff.
  ObjectFactory.Configure(x => x.For<ISchemaResolver>().Add<AppSettingsSchemaResolver>());
于 2012-07-19T08:30:03.173 回答