在ASP.NET MVC中使用Ninject时,抽象出第三方依赖关系的最佳方式是什么?如何处理抽象第三方依赖项(依赖注入)?
通常情况下,我做这样的事情:
public interface IProductRepository
{
IEnumerable<Product> GetProducts();
}
public class ProductRespository : IProductRepository
{
public IEnumerable<Product> GetProducts()
{
...
}
}
然后在控制器:
public class ProductController : Controller
{
private IProductRepository repository;
public ProductController(IProductRepository repository)
{
this.repository = repository;
}
...
}
然后我用Ninject自动注入固体ProductRepository到控制器。
但是,如果依赖项是第三方,我该如何做到这一点?例如,我正在使用FlickrNet。
public class ProductController : Controller
{
private Flickr flickr;
...
}
我希望能够抽象Flickr
对象掳到一个接口,这样我可以使用依赖注入并使其更容易进行单元测试。我知道我可以创建一个'服务'类型的接口,然后根据将包装Flickr对象的类实现一个类。
但我必须在对应于Flickr对象的每个成员的接口中定义一个成员,然后将这些成员映射到包装器对象中。 Flickr对象中有许多成员。
有没有更好的方法来处理这个问题?我的主要目标是在单元测试中轻松模拟Flickr依赖。
Flicker对象中的方法是否是偶然虚拟的? – 2012-08-09 01:48:07
@BrianDishaw不,他们不是。 – 2012-08-09 01:55:14
我想这太容易了。似乎你必须包装它,并创建一个界面..也许有代码生成器,可以为你写锅炉板? – 2012-08-09 01:58:57