2010-05-13 104 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