控制器:构造函数注入不同类型的实例赋值给其实现的接口类型
public class UserController : ApiController
{
private IPersons person;//接收注入的类型实例
public UserController(UCer ucer)//构造函数注入
{
this.person = ucer;
}
// GET: api/User
public string Get()
{
return person.Say();
}
}
Global文件(配置):
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//--导入AutoFac-AutoFac.WebAPI2
//创建容器
var builder = new ContainerBuilder();
// Get your HttpConfiguration.
var config = GlobalConfiguration.Configuration;
//加载程序集类型,自动注册其下面的所有类型(中英文)
builder.RegisterAssemblyTypes(Assembly.Load("Chinaese"));
//加载本程序集下的所有控制器类型
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
//编译一下
var container = builder.Build();
//WebApi整个的解析依赖交给AutoFac //默认构造函数注入
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
//把所有类型都注册到AutoFac容器里,最后把整个项目的实例创建和解析依赖交给AutuFac,
//这样AutoFac在创建控制器实例的时候根据参数类型(不注入的走无参构造函数),去容器取对应实例进行注入
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
B站资源
B站视频简单教程>>>
如果程序中出现请确保控制器具有无参构造函数!!那就是容器内没有其构造函数参数指定的类型资源(需要注入的资源类型没有被注册到容器内)。
2020-04-05 16:35