• Autofac属性方法注入


    添加Autofac和Autofac.Extensions.DependencyInjection包

    使用autofac替换内部IOC

    .UseServiceProviderFactory(new AutofacServiceProviderFactory());

      public interface ICompanyService 
        {
            public int GetId(int id);
        }
    public interface ISysUserService 
        {
            public int GetId(int id);
        }
     public class CompanyService : ICompanyService
        {
            /// <summary>
            /// 这里是一个属性:如果支持属性注入---CompanyService构造完成以后,要吧这个属性的实例构建出来;
            /// </summary>
            [CustomProperty]
            public ISysUserService _ISysUserService { get; set; }
             
            public ISysUserService _ISysUserServiceNoAttribute { get; set; }
    
            public ISysUserService _ISysUserServiceCtor = null;
            public CompanyService(ISysUserService iSysUserService)
            {
                _ISysUserServiceCtor = iSysUserService;
            }
             
            public ISysUserService _ISysUserServiceMethod = null;
    
            public void SetService(ISysUserService iSysUserService)
            {
                _ISysUserServiceMethod = iSysUserService;
            }
    
    
            public int GetId(int id)
            {
                return id;
            }
        }
    
    public class SysUserService : ISysUserService
        {
            public SysUserService()
            {
                Console.WriteLine($"{GetType().Name}被构造。。。。");
            }
    
            public int GetId(int id)
            {
                return 1;
            }
        }
    
    //添加属性注入时使用的属性
     [AttributeUsage(AttributeTargets.Property)]//为了支持属性注入,只能标记在属性上
        public class CustomPropertyAttribute : Attribute
        {
        }
      /// <summary>
        /// IPropertySelector:查看 属性上是否标记某一个特性
        /// </summary>
        public class CustomPropertySelector : IPropertySelector
        {
            public bool InjectProperty(PropertyInfo propertyInfo, object instance)
            {
                //需要一个判断的维度;  如果标记的有CustomPropertyAttribute特性 返回True:返回true;就构造实例
                return propertyInfo.CustomAttributes.Any(it => it.AttributeType == typeof(CustomPropertyAttribute));
            }
        }
    
    注册服务
       public void ConfigureContainer(ContainerBuilder containerBuilder)
            {
    
                //如果要注册某一个Dll中的服务;可以通过反射把dll加载进来;然后再读取出来抽象和具体;然后逐个注册进去;
    
                //注册服务
                containerBuilder.RegisterType<CompanyService>()
                    .OnActivated(e => e.Instance.SetService(e.Context.Resolve<ISysUserService>())) //方法注入--再获取实例后,把指定的某一个方法给执行以下
                    .As<ICompanyService>()
                    .PropertiesAutowired(new CustomPropertySelector());  //Autoafc自己来调用的这个方法
    
    
                containerBuilder.RegisterType<SysUserService>().As<ISysUserService>();
            }
    View Code
  • 相关阅读:
    PHP做Web开发的MVC框架(Smarty使用说明 )
    PHP + Smarty + MySQL
    PHP中smarty与MYSQL数据库的连接
    linux上安装phpstudy
    ThinkPHP使用smarty模板引擎的方法
    smarty 模板几个例子(变量调节器)
    Smarty的基本使用与总结
    gcd 控制线程执行顺序(供参考)
    手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
    Mac、Linux与Windows
  • 原文地址:https://www.cnblogs.com/Duko/p/14949900.html
Copyright © 2020-2023  润新知