在使用依赖注入和wcf的同时创建新的存储库

时间:2011-06-06 09:29:47

标签: c# wcf linq-to-sql dependency-injection

我有一个接收IRepository的wcf服务

IRepository irepo;

public SomeService(IRepository repo)
{
    this.irepo = repo;
}

存储库包含Save,Delete等方法,并通过构造函数接收CustomDataContext:

public class ExampleRepository: IRepository, IDisposible {

   public ExampleRepository(CustomDataContext datacontext)
   {
       this.dc = datacontext;
   }

   ...
}

稍后在服务中,我有一些方法需要使用存储库(稍后在方法中处理它)。既然我想使用依赖注入来切换存储库以进行测试而不是测试,我该如何声明具体的存储库。我可以像这样创建一个新的存储库实例:

using (IRepository repos = (IRepository)Activator.CreateInstance(irepo.GetType(), new object[] {new CustomDataContext()} ))
{
     ...
}

但我认为这是一种缓慢的做法(而且不正确)

有没有办法根据注入的类型创建一个新的存储库,或者我只是让事情变得更复杂然后必要?

提前致谢

2 个答案:

答案 0 :(得分:1)

依赖注入的整个想法是有一些容器可以为你解决依赖关系。您是否有理由不使用框架来注入依赖项,例如结构图或单位?

如果你有一个容器,你应该从容器中请求你的类型的新实例,为你实例化它,并解决所有依赖关系,如果你有这种特定类型的话。

答案 1 :(得分:1)

如果您的容器允许此行为,请尝试注入Func<CustomDataContext, IRepository>。否则,请注入一个IRepositoryFactory方法{。}}。