我是公司的实习生,我的任务是为他们提供一个有效的门户网站。由于我是一名实习生,我的技能水平尚未提升,因此他们聘请了一位将与我们合作的高级开发人员。他建立了我们的项目结构等......他告诉我们要与AutoFac合作进行DI,但我对此并不熟悉。这家伙现在正在度假,所以他无法帮助我们。
使用Autofac时出现此错误,我不知道如何解决此问题。
类型' projectnamespace.Repositories.IRepository'不可能 找到。它可能需要装配认证,例如"的MyType, MyAssembly程序&#34 ;.
我的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();
}
任何帮助都会非常感激。
答案 0 :(得分:1)
错误意味着 Autofac 无法找到托管IRepository
类型的程序集。
要解析它,您必须指定在 autofac 配置中找到类型的位置。您可以通过在service
属性上指定程序集名称来完成此操作。语法是 namespace.typeName,assemblyName
<autofac>
<components>
<component
type="projectnamespace.Repositories.OrderRepository, assemblyName"
service="projectnamespace.Repositories.IRepository, assemblyName" />
</components>
</autofac>
在您的情况下,似乎 assemblyName 是 projectName