繁体   English   中英

如何为SharpRepository的InMemoryRepository提供种子?

[英]How can I seed SharpRepository's InMemoryRepository?

正如标题所说,我如何使用一些虚拟数据为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非常好,但是如果没有能够看到一些种子数据进入我的视图,我就无法真正开发:(

编辑:我设法通过将我的存储库实现设置为单例:

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

然后将其注入我的控制器。 通过将其设置为单例,数据会在请求之间保持不变。

InMemoryRepositoryConfiguration每次都返回一个新的存储库(请参阅此处的工厂源代码),因此如果将其设置为transient(而不是singleton),则不适合依赖注入。

如果你试图在单元测试中使用它并试图保持在内存中,看看CacheRepository ,我相信这将是你想开箱即用的方式:

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构造函数添加前缀。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM