autofac是一个简单很容易上手的net ioc插件。为什么要使用ioc呢?这个可以自行百度,我这边简单的理解就是解除程序之间的耦合度,便于项目维护(鬼知道杂便于啊)
不过现在不知道ioc这东西出去面试是真的掉档次,人家问你们项目啥结构啊。三层,这个算是比较初级的项目结构模式对于小项目来说还能接受。那么你回答说基于ioc依赖注入的多层结构,那么就会提升一个档次。另外在net core里系统自带的类库都是用ioc去实现了。所以这个ioc东西必须要了解下。
按我的理解 ioc也可以叫面向接口编程 首先你先写个接口,然后写过类实现接口,再把实现类和接口类都交给ioc容易。在调用的时候声明接口,让ioc把实现接口类注入进去。
声明个Model
public class UserModel
{
public int ID { get; set; }
public string UserName { get; set; }
}
先声明接口
public interface IUserRepositories
{
List<UserModel> GetList();
}
然后再添加个类实现接口
public class UserRepositories : IUserRepositories
{
public List<UserModel> GetList()
{
List<UserModel> list = new List<UserModel>();
for (int i=1;i<=10;i++) {
list.Add(new UserModel { ID = i, UserName = "张" + i });
}
return list;
}
}
然后在MVC下用nuget 添加autofac,autofac.mvc5(这个5或者4啥的根据自己的项目版本号来) 插件
然后在global下注册到ioc容器中
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
var builder = new ContainerBuilder();
builder.RegisterType(typeof(UserRepositories)).As(typeof(IUserRepositories));
builder.RegisterControllers(typeof(MvcApplication).Assembly);//注册所有的Controller
// builder.RegisterModule<AutofacWebTypesModule>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
然后在HomeController里就可以使用了
public class HomeController : Controller
{
private readonly IUserRepositories _userRepositories;
public HomeController(IUserRepositories userRepositories)//使用构造函数注入
{
_userRepositories = userRepositories;
}
// GET: Home
public ActionResult Index()
{
ViewBag.List = _userRepositories.GetList();
return View();
}
}
项目就脱离了new方式