【问题标题】:How can i initialize some Dependency Injected instance?我如何初始化一些依赖注入实例?
【发布时间】:2011-04-19 04:18:38
【问题描述】:

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

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

那么,有没有办法说

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

【问题讨论】:

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


    【解决方案1】:

    答案是StructureMap Inception :: .OnCreation(Action)

    上面我的例子……

    For<IRepository<Post>>()
        .Use<InMemory.GenericRepository<Post>>()
        .OnCreation(x => x.Add(InMemoryData.CreatePostStubs());
    

    首先,静态方法CreatePostStubs() 返回一个ICollection&lt;Post&gt;,然后将其传递给一个名为Add 的方法,并传递给我新创建的GenericRepository&lt;Post&gt; 实例。实际上,这会将所有存根添加到我的内存存储库中。

    时髦!!

    太时髦了,是时候来个时髦的冷麦地那了……

    感谢@Zor 让我朝着正确的方向前进...

    【讨论】:

      【解决方案2】:

      我真的建议对它进行子类化。毕竟,这是面向对象的方式。

      但是无论如何,即使您的存储库是通用的,您不能只将通用集合传递给构造函数吗?还是我误会了什么?

      【讨论】:

      • 啊当然 :) 我可以将它添加到 generic 构造函数中。 Wikid :) 我会试一试...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2018-01-15
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多