c# – Autofac – 自动注册错误:没有找到与“公共绑定标志”的构造函数

前端之家收集整理的这篇文章主要介绍了c# – Autofac – 自动注册错误:没有找到与“公共绑定标志”的构造函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的Global.asax.cs
public void RegisterContainersUsingAutofac()
    {
        //http://elegantcode.com/2009/01/07/ioc-libraries-compared/
        //http://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac
        //https://code.google.com/p/autofac/
        //http://api.autofac.org/
        var builder = new ContainerBuilder();
        builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
        builder.RegisterModelBinderProvider();
        //builder.RegisterType<AuthenticationService>().As<IAuthenticationService>();
        builder.RegisterControllers(typeof(MvcApplication).Assembly);

        //builder.RegisterAssemblyTypes(typeof(SecurityService).Assembly).
        //      Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest();
        builder.RegisterType(typeof(UnitOfWork)).As(typeof(IUnitOfWork)).InstancePerLifetimeScope()
            .OnRelease(x =>{((IUnitOfWork)x).Commit();});

        builder.RegisterAssemblyTypes(typeof(UserRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
        builder.RegisterAssemblyTypes(typeof(SecurityService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces();

        IContainer container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }

我有以下错误
“AppBase.Service.UserService”上的构造函数不能使用’公共绑定标志’找到.

注册了我实现的存储库和服务接口,但是我在哪里出错了?它在下面打破了.

这是我的userService

public interface IUserService
{
    int Login(string userNameOrEmail,string password,out int errorcode,out int timeout);
    bool Register(string userName,string email,string country,string language,out int errorCode);

    bool Register(User user,out int errorCode);
    bool ResetPassword(string username,string oldPassword,string newPassword,out int errorCode);

    void DeleteUser(string userName);
}
public class UserService : IUserService
{
      private readonly IUserRepository userRepository;
     private UserService(IUserRepository _userRepository)
    {
        userRepository = _userRepository;

    }
    //other methods ...

}

这是我的错误

[DependencyResolutionException: No constructors on type 'AppBase.Service.UserService' can be found with 'Public binding flags'.]
 Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context,IEnumerable`1 parameters) +261
 Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters) +91
 Autofac.Core.Resolving.InstanceLookup.Execute() +135
 Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope,IComponentRegistration registration,IEnumerable`1 parameters) +434
 Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration,IEnumerable`1 parameters) +61
 Autofac.Core.Activators.Reflection.<>c__DisplayClass2.<CanSupplyValue>b__0() +68
 Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() +201
             Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context,IEnumerable`1 parameters) +499
 Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters) +91
 Autofac.Core.Resolving.InstanceLookup.Execute() +135
 Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope,IEnumerable`1 parameters) +434
 Autofac.Core.Resolving.ResolveOperation.ResolveComponent(IComponentRegistration registration,IEnumerable`1 parameters) +52
 Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration,IEnumerable`1 parameters) +115
 Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration,IEnumerable`1 parameters) +300
 Autofac.ResolutionExtensions.TryResolveService(IComponentContext context,Service service,IEnumerable`1 parameters,Object& instance) +103
 Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context,IEnumerable`1 parameters) +218
 Autofac.ResolutionExtensions.ResolveOptional(IComponentContext context,Type serviceType,IEnumerable`1 parameters) +64
 Autofac.ResolutionExtensions.ResolveOptional(IComponentContext context,Type serviceType) +43
 Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(Type serviceType) +49
 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +51

 [InvalidOperationException: An error occurred when trying to create a controller of type 'AppBase.Web.Controllers.AccountController'. Make sure that the controller has a parameterless public constructor.]
 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +182
 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,Type controllerType) +80
 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,String controllerName) +74
 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext,IController& controller,IControllerFactory& factory) +232
 System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
 System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
 System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
  System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback callback,Object state) +98
 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,Object state) +50
 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context,AsyncCallback cb,Object extraData) +16
 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8968180
 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +184

解决方法

我不知道为什么UserService有一个私有构造函数.有没有理由呢?

通过定义构造函数,不再生成默认构造函数public UserService().

Autofac只会注入公共构造函数,您现在没有.如果您将其更改为公开,它应该工作.

原文链接:https://www.f2er.com/csharp/95569.html

猜你在找的C#相关文章