zoukankan      html  css  js  c++  java
  • autofactory 属性注入

      之前不懂net core  在网上搜索了一堆autofac 的属性注入,都特么错的,至少现在net 5 新版的 用不了。

     今天闲空,自己整理一下了 ,代码没有分层架构,都混成UI 层。总体预览如下图

      

    1 是我封装的静态方法  写入的都是autof 注册关系

    2.1 aotofac 属性选择器, 2.2 标记属性  哪个属性需要ioc 的

    3 接口类型

    4 实现接口类

    二 使用方法 

      1 nuget 包  autofac  和Autofac.Extensions.DependencyInjection  2个包

     2  Program类 代码如下 替换ioc 容器

       

      public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                .UseServiceProviderFactory(new AutofacServiceProviderFactory()) ;
        }

    3自定义静态方法  如下 

    静态方法如下  :

        public static class AutoSatic
        {
    
            public static void  RegsterType(this ContainerBuilder builder)
            {
                builder.RegisterType<test>().As<Itest>();
        
                builder.RegisterType<World>().As<IWorld>().PropertiesAutowired(new CustomPropertySelector());
            }
        }

     属性注入是默认支持构造函数注入的。放心大胆的用

     注意的是 属性是放在 实现类标记的!!!!!!!!!!

    World实现类 ,

    具体代码如下
        public class World : IWorld
        {
    
            public World()
            {
                Console.WriteLine($"{nameof(World)}被构造了!!!!");
            }
    
            /// <summary>
            /// 标记属性注入
            /// </summary>
            [CustomPropery]
            public Itest _itest { get; set; }
    
            public void Worlds()
            {
                Console.WriteLine($"{nameof(World)} World !!!!");
            }
    
    
            public void aa()
            {
                _itest.hello();
            }
        }

    4 特性类CustomProperyAttribute 只是标记 啥也不是

        [AttributeUsage(AttributeTargets.Property)]
        public class CustomProperyAttribute:Attribute
        {
        }

    CustomPropertySelector 类 

        /// <summary>
        /// autofac  找出所有属性上是否摸个特性
        /// </summary>
        public class CustomPropertySelector : IPropertySelector
        {
            public bool InjectProperty(PropertyInfo propertyInfo, object instance)
            {  //需要一个判断
                //;如果标记的有CustomPropertyAttribute特性返回True:返回true;就构造实例
                return propertyInfo.CustomAttributes.Any(iterator => iterator.AttributeType == typeof(CustomProperyAttribute));
            }
        }

     最后调用一下   

    属性 有值了。棒棒哒!!!!!!  

  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/jasontarry/p/15324364.html
Copyright © 2011-2022 走看看