【发布时间】:2014-12-06 21:48:22
【问题描述】:
我正在尝试将 autofac 与存储库一起使用,并且我正在尝试添加一些泛型以尝试减少我正在编写的重复代码的数量。但是我正在兜圈子试图让 autofac 为我工作
所以我创建了一个域服务和接口来处理我们的标准 crud 操作
public class DomainService<T>:IDomainService<T>
{
protected readonly IDomainService<T> Repository;
public DomainService(IDomainService<T> repository)
{
Repository = repository;
}
public IQueryable<T> GetQueryable()
{
return Repository.GetQueryable();
}
public virtual Task<T> Add(T entity)
{
return Repository.Add(entity);
}
界面:
public interface IDomainService<T>
{
IQueryable<T> GetQueryable();
Task<T> Add(T entity);
Task<bool> Delete(T entity);
Task<T> Update(T entity);
Task<T> GetById(int id);
Task<T> GetByUID(Guid id);
}
我使用我的 repo 没什么特别的
public class SkillRepository : DomainService<Skill>, ISkill
{
private DataContext _db = new DataContext();
private readonly ILogger _log = null;
public SkillRepository(IDomainService<Skill> repository, ILogger log) : base(repository)
{
_log = log;
}
}
最后我连接 autofac:
var builder = new ContainerBuilder();
// Register the Web API controllers.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// Register other dependencies.
builder.Register(c => new Logger()).As<ILogger>().InstancePerApiRequest();
builder.RegisterType<SkillRepository>()
.As<IDomainService<Skill>>()
.As<ISkill>()
.InstancePerRequest();
// Build the container.
var container = builder.Build();
// Create the depenedency resolver.
var resolver = new AutofacWebApiDependencyResolver(container);
// Configure Web API with the dependency resolver.
GlobalConfiguration.Configuration.DependencyResolver = resolver;
我的 web api 控制器看起来像
public class SkillsController : BaseController<Skill>
{
private readonly ISkill _skillRepository;
public SkillsController(SkillRepository skillRepository) : base(skillRepository)
{
_skillRepository = skillRepository;
}
}
基础控制器
public abstract class BaseController<TEntity> : ApiController
where TEntity : new()
{
protected readonly IDomainService<TEntity> DomainService;
protected BaseController(IDomainService<TEntity> domainService)
{
DomainService = domainService;
}
我得到一个例外:
"没有找到与 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 类型 'Api.EndPoints.Skills.SkillsController' 可以用 可用的服务和参数:\ \ 无法解析参数 'Domain.Repository.SkillRepository SkillRepository' 的构造函数 'Void .ctor(Domain.Repository.SkillRepository)'。”
有什么明显的我做错了吗?
【问题讨论】:
标签: c# asp.net-web-api dependency-injection autofac