zoukankan      html  css  js  c++  java
  • Autofac API 笔记2

    程序集扫描 

      扫描类型

    var dataAccess = Assembly.GetExecutingAssembly();
    
    builder.RegisterAssemblyTypes(dataAccess)
           .Where(t => t.Name.EndsWith("Repository"))
           .AsImplementedInterfaces();
    

     过滤类型

     

       var dataAccess = Assembly.GetExecutingAssembly();
    
                var builder = new ContainerBuilder();
                builder.RegisterAssemblyTypes(dataAccess)
                       .Where(t => t.Name.EndsWith("IG"))
                       .PropertiesAutowired()            //设置属性自动注入
                       .PublicOnly()                        //过滤修饰符,如 internal 类型的类或属性不被注入
                       .Except<AssemblyBIG>()        //过滤类型
                       .AsImplementedInterfaces(); //注入为所依赖的接口类型
    
                var container = builder.Build();
    
                IAssemblyAIG aIG = container.Resolve<IAssemblyAIG>();
                Console.WriteLine(aIG.Get());
    

    扫描模块与模块注入

    var builder = new ContainerBuilder();
    
    var assembly = typeof(AssemblyAIG).Assembly;
    //通过程序集扫描模块
    builder.RegisterAssemblyModules(assembly);
    //模块注入
    builder.RegisterModule(new AssemblyTransportModule()
    {
    	ObeySpeedLimit = true
    });
    
    var container = builder.Build();
    
    IAssemblyAIG aIG = container.Resolve<IAssemblyAIG>();
    Console.WriteLine(aIG.Get());
    
    IDriver driver = container.Resolve<IDriver>();
    driver.Do();  
    
    public class AssemblyTransportModule : Module
    {
    	public bool ObeySpeedLimit { get; set; }
    
    	protected override void Load(ContainerBuilder builder)
    	{
    		builder.RegisterType<AssemblyBIG>().As<IAssemblyBIG>();
    		builder.Register(c => new AssemblyAIG { BIG = c.Resolve<IAssemblyBIG>() })
    				 .As<IAssemblyAIG>();
    
    		if (ObeySpeedLimit)
    			builder.Register(c => new AssemblyBIG()).As<IDriver>();
    		else
    			builder.Register(c => new AssemblyAIG()).As<IDriver>();
    	}
    }
    

    #生命周期释放

    var builder = new ContainerBuilder();
    builder.RegisterType<SomeComponent>()
           .OnRelease(instance => instance.CleanUp()); //在释放时对示例调用指定释放方法
    builder.RegisterType<SomeComponent>().ExternallyOwned(); //禁止自动释放,即生命周期由对象自己管理或者由调用主动释放
    

     #容器创建回调

    var builder = new ContainerBuilder();
    builder
       .RegisterBuildCallback(c => c.Resolve<DbContext>());
    
    // The callback will run after the container is built
    // but before it's returned.
    var container = builder.Build();
    

      

      

      

      

     

              

  • 相关阅读:
    BCS整理
    sharepoint 开发书籍整理记录
    SharePoint 2010 技术参数
    在需要密码的情况,卸载symantec endpoint protection 。可以不用密码删除symantec endpoint protection
    将AD中的数据导入SharePoint 2010  (User Profile Service Application 同步)
    sharepoint 工具集合记录
    invalid property 'userservice' of bean class [com.action.UserAction]: Bean pr
    注解(Annotation)自定义注解入门
    映射
    jdbc
  • 原文地址:https://www.cnblogs.com/ms_senda/p/12572796.html
Copyright © 2011-2022 走看看