如何连接通用存储库参数

时间:2014-12-02 07:56:36

标签: .net autofac

我收到以下错误:

可以使用可用的服务和参数调用“HotelsLive.Application.CompanyService”类型中的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的构造函数:

无法解析参数'HotelsLive.Interfaces.Repositories.IRepositoryAsync 1[HotelsLive.Domain.Models.Company] repository' of constructor 'Void .ctor(HotelsLive.Interfaces.Repositories.IRepositoryAsync 1 [HotelsLive.Domain.Models.Company])'。

服务构造函数是:

    public CompanyService(IRepositoryAsync<Company> repository) : base(repository) {
        _companyRepository = repository;
    }

Autofac注册是:

        builder.RegisterType<CompanyService>()
                            .As<ICompanyService>()
                            .InstancePerRequest();

        builder.RegisterGeneric(typeof(Repository<>))
                .As(typeof(IRepositoryAsync<>))
                .InstancePerRequest();

我假设我需要指定参数,但我不确定如何解决这个问题。我已经查看了comapnyservice注册中的WithParameter方法,但是还没有能够编译任何东西。

1 个答案:

答案 0 :(得分:0)

最终到达那里。最终的配置是:

        builder.RegisterType<CompanyService>()
                            .As<ICompanyService>()
                            .WithParameter(new ResolvedParameter((p, c) => p.Name == "repository", (p, c) => c.Resolve<IRepositoryAsync<Company>>()))
                            .InstancePerRequest();