我正在使用StructureMap DI / IoC,我有一个通用的InMemory存储库。效果很好。我想知道是否可以定义每个存储库保存的初始数据,当它被请求时?
现在,第一个反应是在类的构造函数中执行此操作 - 但我使用的是通用存储库..因此我不知道将实例化的类的类型。接下来,我可以继承GenericRepository,然后创建一个构造函数 - 确定:) 将工作..但我试图避免为每个存储库创建一个单独的类,当GenericRepository或多或少做我想要的一切:)(是的,有一些特定的实例,我做的是子类等等。但是让我们保留这篇文章,简单)。
那么,有没有办法说出来
答案 0 :(得分:0)
我真的建议继承它。毕竟,这是面向对象的方式。
但无论如何,即使您的存储库是通用的,您也不能将通用集合传递给构造函数吗?或者我误解了什么?
答案 1 :(得分:0)
答案是StructureMap Inception :: .OnCreation(Action)
。
所以我的例子,上面......
For<IRepository<Post>>()
.Use<InMemory.GenericRepository<Post>>()
.OnCreation(x => x.Add(InMemoryData.CreatePostStubs());
首先,静态方法CreatePostStubs()
返回ICollection<Post>
,然后将其传递给名为Add
的方法到我新创建的GenericRepository<Post>
实例。实际上,这会将所有存根添加到我的内存存储库中。
如此时髦,是时候为Funky Cold Medina ......
为@Zor欢呼,让我朝着正确的方向开始......