Autofac依赖注入框架

最近使用Autofac框架做项目的依赖注入,感觉挺好用的。

没有深入研究,只是拿来用用,具体可以去官网看看:https://autofac.org/。

这里只是贴一下最近项目的配置:

public partial class Startup
    {
        public void ConfigureContainer(IAppBuilder app)
        {
            var builder = new ContainerBuilder();

            // You can register controllers all at once using assembly scanning...
            builder.RegisterControllers(typeof(MvcApplication).Assembly);

            // Get your HttpConfiguration.
            var config = GlobalConfiguration.Configuration;

            // Register your Web API controllers.
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            // OPTIONAL: Register the Autofac filter provider.
            builder.RegisterWebApiFilterProvider(config);

            // OPTIONAL: Register the Autofac model binder provider.
            builder.RegisterWebApiModelBinderProvider();

            // ...or you can register individual controlllers manually.
            //builder.RegisterType<HomeController>().InstancePerRequest();

            builder.RegisterModule<AutofacWebTypesModule>();//Register Web Abstractions

            builder.RegisterSource(new ViewRegistrationSource());//Enable Property Injection for View Pages

            builder.RegisterFilterProvider();//Enable Property Injection for Action Filters

            builder.RegisterType<EFDbContext>().As<IDbContext>().InstancePerRequest();
            builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
            builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().InstancePerRequest();
            #region  Service
            builder.RegisterType<SysUserService>().As<ISysUserService>().InstancePerLifetimeScope();
            //注册各种服务
            
            #endregion
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

            RuntimeContext.Instance.ContainerManager = new ContainerManager(container);//存储到全局实例中
            // OWIN MVC SETUP:

            // Register the Autofac middleware FIRST, then the Autofac MVC middleware.
            app.UseAutofacMiddleware(container);
            app.UseAutofacMvc();
        }
    }

项目是基于MVC的,利用Startup的partialt特性,加了上面依赖注入配置方法ConfigureContainer,然后可以在MVC的Startup类的Configuration方法中调用该方法,如下:

 public void Configuration(IAppBuilder app)
 {
   ConfigureContainer(app);
 }

OK,依赖注入搞定了.

原文地址:https://www.cnblogs.com/marshhu/p/7541754.html