Dependency injection 翁布拉科8号和国际奥委会

Dependency injection 翁布拉科8号和国际奥委会,dependency-injection,inversion-of-control,umbraco8,Dependency Injection,Inversion Of Control,Umbraco8,我安装了Umbraco 8.1.3,并试图在此之后配置dependecy注入,但不起作用。 我的代码是: 控制器: public class ContactController : UmbracoApiController { private readonly IContactService contactService; public ContactController(IContactService contactService) { this.co

我安装了Umbraco 8.1.3,并试图在此之后配置dependecy注入,但不起作用。 我的代码是:

控制器:

public class ContactController : UmbracoApiController
{
    private readonly IContactService contactService;

    public ContactController(IContactService contactService)
    {
        this.contactService = contactService;
    }

    [HttpPost]
    public void Post([FromBody]ContactDto request)
    {
        this.contactService.Register(request);
    }
}
服务:

public interface IContactService
{
    void Register(ContactDto contact);
}



public class ContactService : IContactService
{
    public ContactService()
    {
    }

    public void Register(ContactDto contact)
    {
      //Implement
    }
}
DI配置:

public class ApplicationComposer : IUserComposer
{
    public void Compose(Composition composition)
    {
        composition.RegisterFor<IContactService, ContactService>();
    }
}
公共类应用程序编译器:IUserComposer
{
公共空间合成(合成)
{
composition.RegisterFor();
}
}
错误是:

“消息”:“发生错误。”, “ExceptionMessage”:“尝试创建“ContactController”类型的控制器时出错。请确保该控制器具有无参数公共构造函数。”, “异常类型”:“System.InvalidOperationException”, “StackTrace”:“在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,Type controllerType)\r\n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u15.MoveNext()”, “内部异常”:{ “消息”:“发生错误。”, “ExceptionMessage”:“无法解析类型:MySite.Controllers.ContactController,服务名称:”, “异常类型”:“System.InvalidOperationException”, C:\projects\LightInject\src\LightInject\LightInject\LightInject.cs:LightInject.servicecainer.CreateDefaultDelegate(类型serviceType,字符串serviceName,布尔thrower)中的第4748行\r\n处的“StackTrace”:“在LightInject.ServiceContainer.CreateDelegate(类型serviceType,布尔thrower)在C:\projects\lightinject\src\lightinject\lightinject.cs中:在C:\projects\lightinject\src\lightinject\lightinject.cs中的lightinject.ServiceContainer.tryGetInstanceInstance(类型serviceType)中的第4705\r\n行:在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.getInstanceActivator中的第3493\r\n行(HttpRequestMessage请求,类型controllerType,Func
1&activator)\r\n位于System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType)”,
“内部异常”:{
“消息”:“发生错误。”,
“ExceptionMessage”:“未解析的依赖项[目标类型:MySite.Controllers.ContactController],[参数:contactService(iSeries.Contacts.IContactService)],[请求的依赖项:ServiceType:iSeries.Contacts.IContactService,ServiceName:”,
“异常类型”:“System.InvalidOperationException”,
“StackTrace”:“在C:\\projects\\LightInject\\src\\LightInject\\LightInject.cs中的LightInject.ServiceContainer.EmitConstructorDependency(IEmitter-emitter-emitter,Dependency-Dependency)处:在LightInject.ServiceContainer.EmitConstructorDependencies处的第4163行\r\n(ConstructionInfo,IEmitter-emitter-emitter-emitter,Action
1 decoratorTargetItem)在C:\projects\lightinject\src\lightinject\lightinject.cs中:lightinject.ServiceContainer.EmitNewInstanceUsingImplementingType处的第4120行\r\n(IEmitter发射器,ConstructionInfo ConstructionInfo,Action
1 DecoratorTargetItemMethod)在C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs:lightinject.ServiceContainer.EmitNewInstance(ServiceRegistration ServiceRegistration,IEmitter发射器)的第4081行中,在C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs:lightinject.ServiceContainer.CreateDynamicMethodElegate的第4038行中C:\projects\lightinject\src\lightinject\lightinject.cs中的(Action
1 serviceEmitter):C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs中lightinject.ServiceContainer.createInstanceDeleteIndex(Action
1 emitMethod)中lightinject.cs:System.Collections.Concurrent.ConcurrentDictionary的第4693\r\n行(TKey key,Func
2 valueFactory)\r\n在C:\projects\LightInject\src\LightInject\LightInject\LightInject.cs中的LightInject.ServiceContainer.EmitLifetime(ServiceRegistration-ServiceRegistration,Action
1 emitMethod,IEmitter-emitter-emitter)处:第4664行\r\n在LightInject.ServiceContainer.C\u显示类别153\u 0.b\u 0(IEmitter-ms)在C:\projects\lightinject\src\lightinject\lightinject.cs:lightinject.ServiceContainer.CreateDynamicMethodElegate(Action
1 serviceEmitter)的第3856行中,在C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs:lightinject.ServiceContainer.CreateDelegate的第3777行中(类型serviceType,字符串serviceName,布尔thror)在C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs中:第4743行“,
“内部异常”:{
“消息”:“发生错误。”,
“ExceptionMessage”:“缺少类型IServices.Contacts.IContactService的公共构造函数”,
“异常类型”:“System.InvalidOperationException”,
“StackTrace”:“在C:\\projects\\LightInject\\src\\LightInject\\LightInject.cs:LightInject.typeconstructionfobuilder.Execute中的LightInject.MostResolvableConstructorSelector.Execute(类型实现类型):第5558行\r\n在C:\\projects\\lightinject\\src\\lightinject\\lightinject.cs:System.Collections.Concurrent.ConcurrentDictionary的第5719行\r\n中在C:\projects\lightinject\src\lightinject\lightinject.cs中:lightinject.ServiceContainer.C\u显示类别153\u 0.b\u 0(IEmitter ms)中的第4028行\r\n在C:\projects\lightinject\src\lightinject\lightinject.cs中:lightinject.ServiceContainer.C\u显示类别153\u 0.b\u 0(IEmitter ms)中的第3856行\r\n在C:\projects\lightinject\src\lightinject\lightinject.cs中:在C:\projects\lightinject\src\lightinject\lightinject.cs中的lightinject.ServiceContainer.emitConstructorDependence(IEmitter-emitter,Dependency-Dependency)处的第3856行\r\n
}
}


有人能帮我吗?

在检查完umbracore代码后,更确切地说,我在RegisterFor(Lifetime=Lifetime.Transient)方法中发现了LightInjectContainer.cs问题:

公共无效寄存器(生存期=生存期)
 public void RegisterFor<TService, TTarget>(Lifetime lifetime = Lifetime.Transient)
        where TService : class
        => RegisterFor<TService, TTarget>(typeof(TService), lifetime);
public static class CompositionExtension
{
    public static void Register<TService, TTarget>(this Composition composition, Lifetime lifetime = Lifetime.Transient) where TTarget : class
    {
        composition.Register(typeof(TService), typeof(TTarget), lifetime);
    }

}
public class ApplicationComposer : IUserComposer
{
    public void Compose(Composition composition)
    {
        composition.Register<IContactService, ContactService>();
    }
}