【问题标题】:The type 'projectname.Repositories.IRepository' could not be found. It may require assembly qualification, e.g. "MyType, MyAssembly"找不到类型“projectname.Repositories.IRepository”。它可能需要装配资格,例如“我的类型,我的程序集”
【发布时间】:2015-04-15 18:36:48
【问题描述】:

我是一家公司的实习生,我的任务是为他们提供一个有效的门户网站。由于我是一名实习生,我的技能还没有那么先进,所以他们聘请了一位将与我们合作的高级开发人员。他建立了我们的项目结构等......他告诉我们使用 AutoFac 进行 DI,但我对此一点也不熟悉。这家伙现在正在度假,所以他不能真正帮助我们自动取款机。

使用 Autofac 时出现此错误,我不知道如何修复它..

类型“projectnamespace.Repositories.IRepository”不能是 成立。它可能需要装配资格,例如“我的风格, 我的大会”。

我的 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();
    }

任何帮助都将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc dependency-injection autofac


    【解决方案1】:

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

    要解决它,您必须指定在 autofac 配置中查找类型的位置。您可以通过在 service 属性上指定程序集名称来完成此操作。语法是 namespace.typeName, assemblyName

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

    在你的情况下,似乎 assemblyNameprojectName

    【讨论】:

    • 感谢这修复了上面的错误。现在我收到一个新错误:在类型“projectnamespace.Controllers.HomeController”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的所有构造函数都不能使用可用的服务和参数调用:
    • 来自错误堆栈的更多信息:无法解析构造函数“Void .ctor(Go4Logistics.Tms.Portal.Web.Repositories.OrderRepository)”的参数“projectnamespace.Repositories.OrderRepository repo”。
    • 您必须在 Autofac 中注册OrderRepository。我建议阅读一些介绍文章以了解依赖注入的关键概念,它将帮助您解决进一步的问题
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 2019-05-12
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2019-04-30
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多