Dependency injection 翁布拉科8号和国际奥委会
我安装了Umbraco 8.1.3,并试图在此之后配置dependecy注入,但不起作用。 我的代码是: 控制器: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
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,Func1&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,Action1 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(Action1 emitMethod)中lightinject.cs:System.Collections.Concurrent.ConcurrentDictionary的第4693\r\n行(TKey key,Func2 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(Action1 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>();
}
}