Fehler aufgetreten beim Versuch, einen Domänencontroller zu erstellen vom Typ 'EmployeeController'. Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor
Warum bin ich ich immer diese Fehlermeldung auf Mitarbeiter-Controller rest funktioniert perfekt
Hier ist mein Mitarbeiter, Controller
public class EmployeeController : ApiController
{
#region Call service
private readonly IEmployeeServices _employeeServices;
public EmployeeController(IEmployeeServices employeeServices)
{
_employeeServices = employeeServices;
}
readonly IEmployeeServices employeeServices = new EmployeeServices();
public EmployeeController():base()
{
_employeeServices = employeeServices;
}
}
- UND das ist meine perfekt Funktionierende Produkt-Controller
public class ProductController : ApiController
{
#region Call service
private readonly IProductServices _productServices;
public ProductController(IProductServices productServices)
{
_productServices = productServices;
}
readonly IProductServices productServices = new ProductServices();
public ProductController()
{
_productServices = productServices;
}
}
Hier wird der stack-trace
Ist ein Fehler aufgetreten.Ein Fehler ist aufgetreten beim Versuch, einen Domänencontroller zu erstellen vom Typ 'EmployeeController'. Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor.System.InvalidOperationException in System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Erstellen(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) bei System.Web.Http.Controller.HttpControllerDescriptor.CreateController(HttpRequestMessage request) bei System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()ist Ein Fehler aufgetreten.Auflösung der Abhängigkeit fehlgeschlagen, type = "TheWork.Controller.EmployeeController", name = "(none)". Ausnahme ist aufgetreten während: während der Lösung. Ausnahme: InvalidOperationException - Der aktuelle Typ, BusinessServices.IEmployeeServices, ist ein interface und kann nicht gebaut werden. Sind Sie fehlt ein Typ-mapping? ----------------------------------------------- In der Zeit der Ausnahme, dass der container wurde: Auflösen TheWork.Controller.EmployeeController,(keine) Lösung parameter "employeeServices" der Konstruktor TheWork.Controller.EmployeeController(BusinessServices.IEmployeeServices employeeServices) Auflösen BusinessServices.IEmployeeServices,(keine) Microsoft.Praktiken.Einheit.ResolutionFailedException bei Microsoft.Praktiken.Einheit.UnityContainer.DoBuildUp(Typ t, Object bestehenden, String name, IEnumerable
1 resolverOverrides)
 at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
 at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
 at Unity.WebApi.UnityDependencyScope.GetService(Type serviceType)
 at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func
1& activator) bei System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Erstellen(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)ist Ein Fehler aufgetreten.Der aktuelle Typ, BusinessServices.IEmployeeServices, ist ein interface und kann nicht gebaut werden. Sind Sie fehlt ein Typ-mapping?System.InvalidOperationException an Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext Kontext) an lambda_method(Schließung , IBuilderContext ) Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.DynamicMethodBuildPlan.Aufbau(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) bei Microsoft.Praktiken.Einheit.ObjectBuilder.NamedTypeDependencyResolverPolicy.Beheben(IBuilderContext Kontext) an lambda_method(Schließung , IBuilderContext ) Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.DynamicMethodBuildPlan.Aufbau(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext Kontext) an Microsoft.Praktiken.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext Kontext) an Microsoft.Praktiken.Einheit.UnityContainer.DoBuildUp(Typ t, Object bestehenden, String name, IEnumerable`1 resolverOverrides)
Update
Hier ist die Einheit Konfiguration
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
System.Web.Mvc.DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
RegisterTypes(container);
}
public static void RegisterTypes(IUnityContainer container)
{
ComponentLoader.LoadContainer(container, ".\\bin", "TheWork.dll");
ComponentLoader.LoadContainer(container, ".\\bin", "BusinessServices.dll");
ComponentLoader.LoadContainer(container, ".\\bin", "DataModel.dll");
}
}
Chris habe ich noch die Config-Klasse finden Sie die update-Teil der Frage
InformationsquelleAutor Dummy | 2017-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Begraben in der stack-trace ist die Ursache des Problems:
Das Problem ist, dass die
EmployeeController
ist eine Instanz vonIEmployeeServices
doch die Einheit nicht weiß, welche konkreten Typ instanziieren. Es sieht die Umsetzung Klasse sein soll, registriert durch den AufrufComponentLoader.LoadContainer(container, ".\\bin", "BusinessServices.dll");
aber aus irgendeinem Grund ist es nicht registriert. Es könnte ein bug im code oder vielleicht die BusinessServices.dll ist veraltet und enthält nicht dieIEmployeeServices
definition.Es ist schwer zu sagen, warum
IEmployeeServices
ist nicht registriert, ohne zu sehen, alle code-und runtime-Abhängigkeiten (weil Typen werden dynamisch geladen/registriert).DependencyResolver
Klasse. mitregisterComponent.RegisterType<IEmployeeServices,EmployeeServices>();
InformationsquelleAutor Randy Levy
Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor
InformationsquelleAutor Leon Barkan