本篇文章用构造器注入进行示例,做的不对的地方,欢迎指出。做的不好的地方,大佬轻喷。
本篇文章是在已经建立好其他层(业务逻辑,数据访问)的情况下进行操作,建立的步骤我就不写了,本篇只是简单的实现,方便理解。
我的目录结构
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; } }
微信扫码查看本文
发表评论