2010-05-13 49 views
0

我测试了Autofac容器与这些如下:autofac如何使用构造函数参数返回服务?

var builder = new ContainerBuilder(); 

builder.Register(t => new TreatmentCenterRepository()) 
    .As<IRepository<TreatmentCenter>>(); 

builder.Register(t => new CreateTreatmentCenterCommandHandler(t.Resolve<IRepository<TreatmentCenter>>())) 
    .As<ICommandHandler<CreateTreatmentCenterCommand>>(); 
var container = builder.Build(); 
var repo = container.Resolve<IRepository<TreatmentCenter>>(); 
var handler = container.Resolve<ICommandHandler<TreatmentCenter>>(); 

Console.WriteLine(repo); 
Console.WriteLine(handler); 

命令处理程序实现有一个构造函数与库参数。

当我运行此我得到这个异常:

Unhandled Exception: Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 'Console 
Application2.ICommandHandler`1[[ConsoleApplication2.TreatmentCenter, ConsoleApplication2, Version=1.0.0.0, Cul 
ture=neutral, PublicKeyToken=null]]' has not been registered. 
    at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Service service, IEnumerable`1 parameter 
s) 
    at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters) 
    at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context) 
    at ConsoleApplication2.Program.Main(String[] args) in D:\Projects\Test Projects\ConsoleApplication2\Console 
Application2\Program.cs:line 30 

为什么barfing?我清楚地将该处理程序与存储库注册为ctor参数。

感谢

回答

2

异常消息指示问题:你想解决ICommandHandler<TreatmentCenter>未在容器中注册。你的在你的容器中有ICommandHandler<CreateTreatmentCenterCommand>。它可能是一个错字吗?

+1

你是对的,我的好先生。最后一条语句应该是“var handler = container.Resolve >();”感谢您指出了这一点。 – harropriiz 2010-05-13 21:50:37