Une erreur s'est produite lors de la tentative de création d'un contrôleur de type 'TypeNewsController'
J'ai cherché longtemps et dur, mais rien trouvé qui a contribué encore. Où vais-je tort? Je ne sais vraiment pas quoi faire. J'ai écrit tous les détails ci-dessous. J'ai essayé et ne pas réussir.
Une erreur s'est produite lors de la tentative de créer un contrôleur de type
'TypeNewsController'. Assurez-vous que le contrôleur dispose d'un
sans paramètre constructeur public.
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
WebApiConfig.Register(GlobalConfiguration.Configuration);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrapper.Run();
}
}
mon apicontroller :
public class TypeNewsController : ApiController
{
private readonly ITypeNewsService _typeNewsService;
public TypeNewsController(ITypeNewsService typeNewsService)
{
_typeNewsService = typeNewsService;
}
[HttpGet]
public TypeNewsResponse Get([ModelBinder] PageRequest model)
{
model = model ?? new PageRequest();
var output = _typeNewsService.GetTypeNewss().ToList();
return new TypeNewsResponse
{
Page = model.PageIndex,
Records = model.PageSize,
Rows = output.ToList(),
Total = output.Count() / model.PageSize,
};
}
}
erreur :
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
An error occurred when trying to create a controller of type 'TypeNewsController'. Make sure that the controller has a parameterless public constructor.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()
</StackTrace>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Type 'JuventusNewsSiteApk.Controllers.TypeNewsController' does not have a default constructor
</ExceptionMessage>
<ExceptionType>System.ArgumentException</ExceptionType>
<StackTrace>
at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
</StackTrace>
</InnerException>
</Error>
Programme d'amorçage de la classe :
public static class Bootstrapper
{
public static void Run()
{
SetAutofacContainer();
//Configure AutoMapper
AutoMapperConfiguration.Configure();
}
private static void SetAutofacContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerRequest();
builder.RegisterAssemblyTypes(typeof(NewsRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces().InstancePerRequest();
builder.RegisterAssemblyTypes(typeof(NewsService).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces().InstancePerRequest();
builder.RegisterAssemblyTypes(typeof(DefaultFormsAuthentication).Assembly)
.Where(t => t.Name.EndsWith("Authentication"))
.AsImplementedInterfaces().InstancePerRequest();
builder.Register(
c => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new JuventusNewsApkEntities())))
.As<UserManager<ApplicationUser>>().InstancePerRequest();
builder.RegisterFilterProvider();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
mise à jour :
public class TypeNewsService : ITypeNewsService
{
private readonly ITypeNewsRepository _typeNewsRepository;
private readonly IUnitOfWork _unitOfWork;
public TypeNewsService(ITypeNewsRepository typeNewsRepository,
IUnitOfWork unitOfWork)
{
_typeNewsRepository = typeNewsRepository;
_unitOfWork = unitOfWork;
}
#region ITypeNewsService Member
public void AddTypeNews(TypeNews typeNews)
{
_typeNewsRepository.Add(typeNews);
SaveTypeNews();
}
public void DeleteTypeNews(int id)
{
_typeNewsRepository.DeleteById(id);
SaveTypeNews();
}
public IEnumerable<TypeNews> GetTypeNewss()
{
var output = _typeNewsRepository.GetAll();
return output;
}
public void SaveTypeNews()
{
_unitOfWork.Commit();
}
#endregion
}
public interface ITypeNewsService
{
void AddTypeNews(TypeNews typeNews);
void DeleteTypeNews(int id);
IEnumerable<TypeNews> GetTypeNewss();
void SaveTypeNews();
}
source d'informationauteur Football-Is-My-Life
Vous devez vous connecter pour publier un commentaire.
Votre contrôleur est
WebApi
contrôleur et de l'enregistrement pour Autofac diffère de MVC enregistrement. WebApi ne pas utiliserDependencyResolver
de sorte que vous aurez besoin de dire à WebApi à utiliser Autofac résolveur spécifiquement.Vous aurez besoin d'ajouter à votre
SetAutofacContainer
code:Voir https://code.google.com/p/autofac/wiki/WebApiIntegration pour plus d'info.
Dans mon cas, la raison en était que le résolveur ne pouvait pas trouver une correspondance. Admettons que dire HomeController a une dépendance sur IDumb, le résolveur ne pouvait pas trouver une mise en œuvre concrète des Muets qui implémente IDumb.
En d'autres mots, le message d'erreur
est totalement trompeuse.
Dans mon cas j'ai simplement résolu par l'ajout d'une référence au projet de la classe Muet. Il doit avoir été quelque chose comme "Pas de mapping pour IDumb a pu être trouvé.". Je ne suis pas sûr de savoir si le problème est avec NInject ou MME que ce soit, il m'a fallu des heures pour trouver ce out.
Assurez-vous que vous utilisez le même type d'appel, je veux dire, Get, Post, Put, et de ce que vous avez dans la méthode de contrôleur.
Et avez-vous besoin d'ajouter de la validité de votre référentiel de NijectConfig.cs pour le contrôleur.
noyau.Bind<[iRepo]>().≪[Repo]>().InRequestScope();
Pour le contrôleur, vous devriez avoir paramètre de moins de constructeur. Si vous souhaitez utiliser paramétrées constructeur veuillez utiliser le code ci-dessous.
Pass objet de TypeNewsService classe