【问题标题】:Property Injection with AutoFac in Base controller mvc app在基本控制器 mvc 应用程序中使用 AutoFac 进行属性注入
【发布时间】:2018-05-10 15:47:10
【问题描述】:

我正在使用 ASP.net MVC 应用程序。我想在基控制器类中注入服务(我不能对 DI 使用构造函数注入)。

我想在基本控制器中使用属性注入。

以下是服务代码:

 public interface IUserService {}
 public class UserService : IUserService
 {
        private readonly IUnitOfWork unitOfWork;
        private readonly IUserRepository userRepo;
        private readonly ILoginAttemptRepository loginAttemptRepo;
        private readonly IRoleRepository roleRepository;
        public UserService(IUserRepository userRepository, 
            ILoginAttemptRepository loginAttemptRepository,
            IUnitOfWork unitOfWork, IRoleRepository roleRepository)
        {
            userRepo = userRepository;
            this.unitOfWork = unitOfWork;
            loginAttemptRepo = loginAttemptRepository;
            this.roleRepository = roleRepository;
        }
 }

以下是 Autoface 全局设置:

private static void SetAutofacContainer()
        {
            var builder = new ContainerBuilder();

            // MVC - Register your MVC controllers.
            builder.RegisterControllers(Assembly.GetExecutingAssembly());

            builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
            builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerRequest();

            builder.RegisterAssemblyTypes(typeof(BankRepository).Assembly)
           .Where(t => t.Name.EndsWith("Repository"))
           .AsImplementedInterfaces()
           .InstancePerRequest();

            builder.RegisterAssemblyTypes(typeof(UserService).Assembly)
           .Where(t => t.Name.EndsWith("Service"))
           .AsImplementedInterfaces()
           .InstancePerRequest();

            // Register for filter 
            builder.RegisterFilterProvider();

            //Register for base class
            // builder.RegisterType<IUserService>().PropertiesAutowired();

            // MVC - Set the dependency resolver to be Autofac.
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

基本控制器:

public class BaseController : Controller  
 {
    public IUserService UserService { get; set; }

    //todo: using UserService instance 
 }

我尝试使用 builder.RegisterType().PropertiesAutowired(); 但它没有奏效,任何想法我错过了什么或我该如何实现这一目标?

【问题讨论】:

  • 你能显示基本控制器代码吗?
  • 属性需要在控制器上自动装配,而不是在用户服务上。您在RegisterControllers 线路上尝试过吗?
  • @stephen.vakil 你能分享一些参考吗,我不清楚你的意思

标签: asp.net-mvc autofac


【解决方案1】:
builder.RegisterControllers(typeof(MvcApplication).Assembly)
       .PropertiesAutowired();

参考:https://stackoverflow.com/a/29536104/3264939

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多