我如何初始化一些Dependency Injected实例?

时间:2010-09-30 05:07:48

标签: .net dependency-injection inversion-of-control structuremap default-value

我正在使用StructureMap DI / IoC,我有一个通用的InMemory存储库。效果很好。我想知道是否可以定义每个存储库保存的初始数据,当它被请求时?

现在,第一个反应是在类的构造函数中执行此操作 - 但我使用的是通用存储库..因此我不知道将实例化的类的类型。接下来,我可以继承GenericRepository,然后创建一个构造函数 - 确定:) 工作..但我试图避免为每个存储库创建一个单独的类,当GenericRepository或多或少做我想要的一切:)(是的,有一些特定的实例,我做的是子类等等。但是让我们保留这篇文章,简单)。

那么,有没有办法说出来

  1. 在请求IRepository时创建InMemoryGenericRepository的实例
  2. 现在,调用这个静态方法(填充Repo即时):Foo(IRepository repository){...}当然传递给刚刚由StructureMap创建的实例。

2 个答案:

答案 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 !!

如此时髦,是时候为Funky Cold Medina ......

alt text

为@Zor欢呼,让我朝着正确的方向开始......