如何在 asp.net Mvc 项目中使用 class 库中的 Autofac?
How to use Autofac from class library in asp.net Mvc project?
我在 class 库项目中注册了我的 classes,如下所示:
public static ContainerBuilder Init()
{
var builder = new ContainerBuilder();
var assemblies = ConfigurationManager.AppSettings["IocAssembly"].Split(',');
for (int i = 0; i < assemblies.Length; i++)
{
var assemblyName = assemblies[i];
foreach (var type in Assembly.Load(assemblyName).GetTypes())
{
type.GetInterfaces().Where(x => x.Namespace == string.Concat(assemblyName, ".Contract")).ToList().ForEach
(s => builder.RegisterType(type).As(s).InstancePerLifetimeScope());
}
}
return builder;
}
然后在我的 asp.net 项目中添加对该 dll 的引用,并尝试构建容器,如您所见:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
var container=AutofacInitializer.Init();
container.Build();
}
但什么也没发生,我得到了错误
No parameterless constructor defined
对于我的控制器...
我哪里错了?
您没有设置 DependencyResolver
。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
我在 class 库项目中注册了我的 classes,如下所示:
public static ContainerBuilder Init()
{
var builder = new ContainerBuilder();
var assemblies = ConfigurationManager.AppSettings["IocAssembly"].Split(',');
for (int i = 0; i < assemblies.Length; i++)
{
var assemblyName = assemblies[i];
foreach (var type in Assembly.Load(assemblyName).GetTypes())
{
type.GetInterfaces().Where(x => x.Namespace == string.Concat(assemblyName, ".Contract")).ToList().ForEach
(s => builder.RegisterType(type).As(s).InstancePerLifetimeScope());
}
}
return builder;
}
然后在我的 asp.net 项目中添加对该 dll 的引用,并尝试构建容器,如您所见:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
var container=AutofacInitializer.Init();
container.Build();
}
但什么也没发生,我得到了错误
No parameterless constructor defined
对于我的控制器... 我哪里错了?
您没有设置 DependencyResolver
。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));