我有一个接收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()} ))
{
...
}
但我认为这是一种缓慢的做法(而且不正确)
有没有办法根据注入的类型创建一个新的存储库,或者我只是让事情变得更复杂然后必要?
提前致谢
答案 0 :(得分:1)
依赖注入的整个想法是有一些容器可以为你解决依赖关系。您是否有理由不使用框架来注入依赖项,例如结构图或单位?
如果你有一个容器,你应该从容器中请求你的类型的新实例,为你实例化它,并解决所有依赖关系,如果你有这种特定类型的话。
答案 1 :(得分:1)
如果您的容器允许此行为,请尝试注入Func<CustomDataContext, IRepository>
。否则,请注入一个IRepositoryFactory
方法{。}}。