2010-05-13 1 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); 

Команда обработчик имеет один CTOR с параметром хранилища.

Когда я запускаю это я получаю это исключение:

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 

Почему ненадежен? Я четко зарегистрировал этот обработчик с хранилищем как ctor param.

Благодаря

ответ

2

Сообщение об исключении указывает проблему вы пытаетесь решить ICommandHandler<TreatmentCenter>, который не зарегистрирован в контейнере. Что у вас есть в вашем контейнере ICommandHandler<CreateTreatmentCenterCommand>. Возможно, это опечатка?

+1

Вы правы, мой добрый сэр. Последним утверждением должно быть «var handler = container.Resolve >();" Спасибо за указание на это. – harropriiz