本篇文章用构造器注入进行示例,做的不对的地方,欢迎指出。做的不好的地方,大佬轻喷。
本篇文章是在已经建立好其他层(业务逻辑,数据访问)的情况下进行操作,建立的步骤我就不写了,本篇只是简单的实现,方便理解。
我的目录结构

1.先从Nuget下载这几个包

2.建立AutoFacRegister类
public class AutoFacRegister
{
public static void Regist()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
ContainerBuilder builder = new ContainerBuilder();
//builder.RegisterControllers(Assembly.GetExecutingAssembly());//这个是注册MVC的
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注册所有Api控制器
//需要注册类所在的dll
Assembly[] assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(y=>y.CodeBase.ToLower().Contains("ygmxapi.bo.dll")|| y.CodeBase.ToLower().Contains("ygmxapi.dao.dll")).ToArray();
//注册所有Bo结尾的类,这个是业务逻辑层,命名规则根据自己的实际情况而定
builder.RegisterAssemblyTypes(assemblies).Where(y => y.Name.EndsWith("Bo")).AsImplementedInterfaces();
//builder.RegisterAssemblyTypes(assemblies).Where(y => y.Name.EndsWith("Dao")).AsImplementedInterfaces();
var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册API容器需要使用HttpConfiguration对象
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}3.程序启动注入(Global.asax)
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
//程序启动注入
AutoFacRegister.Regist();
}
}4.接口调用数据:在接口中,就可以用构造方法来初始化Bo
public class TestController : ApiController
{
TestBo _tbo = null;
//构造器注入Bo
public TestController(TestBo tbo)
{
_tbo = tbo;
}
public string Index()
{
//这个是路由配置的,想了解的可以去搜索相关路由配置的文章
string uname = RequestContext.RouteData.Values["uname"].ToString();
string res=_ibo.sayHello(uname);
return res;
}
}在Business中也一样
public class TestBo : ITestBo
{
private ITestDao _tdao;
public TestBo(ITestDao tdao)
{
_tdao = tdao;
}
public string sayHello(string name)
{
string res= name + ":来自Bo。";
res += _tdao.sayHello(name);
return res;
}
}
微信扫码查看本文
发表评论