autofac注入失败的通用接口&回购

时间:2014-08-10 08:03:39

标签: dependency-injection autofac

我正在尝试将autofac连接到我创建的存储库但是我一直收到错误"尝试创建类型为' DummyController'的控制器时发生错误。确保控制器具有无参数的公共构造函数。"

我已经定义了我的界面&回购像

public interface IDomainService<T>
{
   ...

}

public class DomainService<T>:IDomainService<T>
{
    protected readonly IDomainService<T> Repository;

    public DomainService(IDomainService<T> repository)
    {
        Repository = repository;
    }

    ....
}

我使用我的界面和域名服务

我的自定义仓库
 public class FooRepository:IDomainService<FooModel>
 {
     private DataContext db = new DataContext();
     private ILogger log = null;

    public FooRepository(ILogger logger)
    {
        log = logger;

    }

public interface IFoo:IDomainService<FooModel>
{
    ....

}

在我的Application_Start配置autofac

builder.RegisterType<FooRepository>().As<IDomainService<FooModel>>().InstancePerDependency();

最后我的控制器

  public class DummyController : ApiController
{
    private readonly IFoo _fooRepository;

    public DummyController(IFoo repository)
    {
        _fooRepository = repository;
    }

该网站编译正常,但是当我尝试点击我的api端点时,我一直收到错误

  

尝试创建类型为&#39; DummyController&#39;的控制器时发生错误。确保控制器具有无参数的公共构造函数。

显然我设置了一些错误,但我似乎无法弄清楚出了什么问题。谁能发现什么是错的?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果您想将服务用作IFoo,则需要将其注册为IFoo

所以请将注册更改为:

builder.RegisterType<FooRepository>()
       .As<IFoo>()
       .InstancePerDependency();

如果您仍然需要使用IDomainService<FooModel>访问,那么您可以写:

builder.RegisterType<FooRepository>()
       .As<IDomainService<FooModel>>()
       .As<IFoo>()
       .InstancePerDependency();