如何为SharpRepository的InMemoryRepository提供种子?

时间:2014-01-17 13:17:02

标签: c# sharp-repository

正如标题所说,我如何使用一些虚拟数据对SharpRepository's InMemoryRepository进行播种?

我在配置中试过这个:

var sharpRepositoryConfiguration = new SharpRepositoryConfiguration();
sharpRepositoryConfiguration.AddRepository(new InMemoryRepositoryConfiguration("inmemory"));
sharpRepositoryConfiguration.DefaultRepository = "inmemory";
var repo = sharpRepositoryConfiguration.GetInstance<Account>().Add(new [] { .... });

return new StructureMapDependencyResolver(sharpRepositoryConfiguration);

但是,在我的控制器中解析存储库时,数据不存在。我的理解是,InMemoryRepository将作为内存中的数据存储 - 但只是InMemoryRepository纯粹只是将数据存储在存储库中而从不将它们推送到底层的内存数据存储中的情况?

能够进行单元测试和模拟SharpRepository非常好,但是如果没有能够在我的视图中看到一些种子数据,我就无法真正开发出来:(

编辑:我设法将我的存储库实现设置为Singleton:

x.For<IAccountRepository>()
    .Singleton()
    .Use<SharpRepositoryAccountRepository>();

然后将其注入我的控制器。通过将其设置为单例,数据会在请求中持续存在。

1 个答案:

答案 0 :(得分:2)

InMemoryRepositoryConfiguration每次都返回一个 new 存储库(请参阅工厂here的来源),因此如果将其设置为transient,则不适合依赖注入(与单身人士相比)。

如果你试图在单元测试中使用它并且试图留在内存中,请查看CacheRepository,我相信这将是您想要的开箱即用方式:< / p>

var sharpRepositoryConfiguration = new SharpRepositoryConfiguration();
sharpRepositoryConfiguration.AddRepository(new CacheRepositoryConfiguration("inmemory"));
sharpRepositoryConfiguration.DefaultRepository = "inmemory";
var repo = sharpRepositoryConfiguration.GetInstance<Account>().Add(new [] { .... });

return new StructureMapDependencyResolver(sharpRepositoryConfiguration);

默认使用InMemoryCachingProvider,使用MemoryCache来保持持久性。如果您有更多的存储库以避免它们相互踩踏,请为CacheRepositoryConfiguration构造函数添加前缀。