2011-06-06 54 views
0

创建新库我有一个WCF服务,它在IRepository同时仍然使用依赖注入与WCF

IRepository irepo; 

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

该库包含类似保存方法,删除等操作,并通过构造带在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

看看这篇文章:http://bit.ly/bF7jL3。它给出了如何在使用LINQ to SQL时启用单元测试代码。 – Steven 2011-06-06 10:05:27

回答

1

依赖注入的总体思路是,有一些容器,这样就解决了你的依赖你。你有没有理由不使用框架来注入你的依赖关系,比如说结构图或统一性?

如果你确实有一个容器,你应该从容器中为你实例化一个新的类型实例,并解析所有依赖关系(如果有的话)。

+0

啊。每次我想要一个新的Repository时,我都没想过要从容器中请求一个新的对象。我想我陷入了构造器注入的心态。谢谢 – 2011-06-06 09:42:30

+0

那么即使在构造函数注入时,从容器中请求新的实例也很重要,因为容器可以将适当的依赖注入到新构造的类型中。 – thekip 2011-06-06 09:45:43

1

如果您的容器允许这种行为,请尝试注入Func<CustomDataContext, IRepository>。否则,注入将有CreateInstance方法的IRepositoryFactory