Autofac 不会自动将属性连接到自定义 class

Autofac not auto wiring properties to a custom class

我正在尝试使用 Autofac 自动装配属性为控制器调用的自定义 class 设置一个 class。我有一个测试项目来展示这个。我的解决方案中有两个项目。一个 MVC 网络应用程序和一个 class 服务库。这是代码:

在服务项目中,AccountService.cs:

public interface IAccountService
{
    string DoAThing();
}

public class AccountService : IAccountService
{
    public string DoAThing()
    {
        return "hello";
    }
}

现在剩下的都在 MVC web 项目中了。

Global.asax.cs

var builder = new ContainerBuilder();

builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();

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

builder.RegisterType<Test>().PropertiesAutowired();

builder.RegisterFilterProvider();

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

Test.cs:

public class Test
{
    //this is null when the var x = "" breakpoint is hit.
    public IAccountService _accountService { get; set; }

    public Test()
    {

    }

    public void DoSomething()
    {
        var x = "";
    }
}

HomeController.cs

public class HomeController : Controller
{
    //this works fine
    public IAccountService _accountServiceTest { get; set; }
    //this also works fine
    public IAccountService _accountService { get; set; }

    public HomeController(IAccountService accountService)
    {
        _accountService = accountService;
    }
    public ActionResult Index()
    {
        var t = new Test();
        t.DoSomething();
        return View();
    }

//...
}

从上面的代码可以看出,_accountServiceTest_accountService在controller中都可以正常工作,但是在Test.csDoSomething()方法中设置断点时=], _accountService 始终为 null,无论我在 global.asax.cs.

中输入什么

当您使用 new 创建对象时,autofac 对这个对象一无所知。所以你总是在 Test class.

中得到 IAccountService 的 null 是正常的

正确的做法是: 设置测试接口 class 并注册它。然后将此接口添加到您的 HomeController 构造函数中。

public HomeController(IAccountService accountService,ITest testService)