我是一家公司的实习生,我的任务是为他们提供有效的Web门户。由于我是实习生,所以我的技能还没有那么先进,所以他们聘请了一位将与我们合作的高级开发人员。他建立了我们的项目结构,等等。他告诉我们使用AutoFac for DI,但我对此并不陌生。这个家伙现在正在休假,所以他不能真正帮助我们atm。

使用Autofac时,出现此错误,我不知道如何解决。


  类型“ projectnamespace.Repositories.IRepository”不能为
  找到了。它可能需要组装认证,例如“我的风格,
  MyAssembly”。
  


我的Global.asax.cs

        var builder = new ContainerBuilder();

        //register types from configuration
        builder.RegisterModule(new ConfigurationSettingsReader());
        // Register your MVC controllers.
        builder.RegisterControllers(Assembly.GetExecutingAssembly());

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


Web.config

<autofac>
  <components>
    <component
      type="projectnamespace.Repositories.OrderRepository, projectnamespace"
      service="projectnamespace.Repositories.IRepository" />
  </components>
</autofac>


IRepository.cs

public interface IRepository
{
    string FetchAll();
}


OrderRepository.cs

public class OrderRepository : IRepository
{
    public string FetchAll()
    {
        return "return something";
    }
}


最后但并非最不重要的HomeController

    private readonly IRepository _repository;

    public HomeController(OrderRepository repo)
    {
        _repository = repo;
    }

    [HttpGet]
    public ActionResult Index()
    {
        ViewBag.Data = _repository.FetchAll();
        return View();
    }


任何帮助将不胜感激。

最佳答案

该错误意味着Autofac无法找到承载IRepository类型的程序集。

要解决它,您必须指定在autofac配置中可以找到该类型的位置。您可以通过在service属性上指定程序集名称来实现。语法为namespace.typeName,assemblyName

<autofac>
  <components>
    <component
      type="projectnamespace.Repositories.OrderRepository, assemblyName"
      service="projectnamespace.Repositories.IRepository, assemblyName" />
  </components>
</autofac>


在您的情况下,assemblyName似乎是projectName

关于c# - 找不到类型'projectname.Repositories.IRepository'。它可能需要组装认证,例如“MyType,MyAssembly”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29647347/

10-09 01:18