0

正如标题所说,我怎样才能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>();

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

4

1 回答 1

2

每次都会InMemoryRepositoryConfiguration返回一个的存储库(请参阅此处的工厂源代码),因此如果将其设置为瞬态(相对于单例),则它不适合依赖注入。

如果您尝试在单元测试中使用它并尝试保留在内存中,请查看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避免它们相互影响。

于 2014-01-17T14:50:54.907 回答