ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

控制台应用程序使用Autofac实现AOP接口代理拦截

2021-01-19 18:32:55  阅读:268  来源: 互联网

标签:Autofac RegisterType builder public AOP using 控制台 void


1 安装依赖包

2 定义拦截器类

3 定义被代理的接口和实现代理接口的类

using Autofac.Extras.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp_AutofacAop
{
    /// <summary>
    /// 定义一个接口
    /// </summary>
    public interface IAnimal
    {
        void Test(string Name);
    }

    /// <summary>
    /// 继承接口,并实现方法,给类型加上特性Attribute
    /// </summary>
    [Intercept(typeof(LogInterceptor))]
    public class Dog : IAnimal
    {
        public void Test(string Name)
        {
            Console.WriteLine("Dog Run");
        }
    }

    /// <summary>
    /// 继承接口,并实现方法,给类型加上特性Attribute
    /// </summary>
    [Intercept(typeof(LogInterceptor))]
    public class Pig : IAnimal
    {

        public void Test(string Name)
        {
            Console.WriteLine("Pig Run");
        }
    }

    /// <summary>
    /// 继承接口,并实现方法,给类型加上特性Attribute
    /// </summary>
    [Intercept(typeof(LogInterceptor))]
    public class Cat : IAnimal
    {
        public void Test(string Name)
        {
            Console.WriteLine("Cat Run");
        }
    }
}

4 初始化Autofac并注册依赖

        #region 在应用的启动地方构造Autofac容器并注册依赖
        // 定义容器
        private static IContainer Container { get; set; }

        /// <summary>
        /// 初始化Autofac
        /// </summary>
        private static void AutofacInit()
        {
            var builder = new ContainerBuilder();

            // 注册依赖
            builder.RegisterType<LogInterceptor>(); // 注册拦截器
            builder.Register<Dog>(c => new Dog ()).As<IAnimal>().EnableInterfaceInterceptors();
            builder.RegisterType<Pig>().Named<IAnimal>("Pig").EnableInterfaceInterceptors();
            builder.RegisterType<Cat>().Named<IAnimal>("Cat").EnableInterfaceInterceptors();
            builder.RegisterType<AnimalManager>();

            Container = builder.Build();
        }
        #endregion

5 测试

完整测试代码如下

using System;

using Autofac;
using Autofac.Extras.DynamicProxy;

namespace ConsoleApp_AutofacAop
{
    class Program
    {
        static void Main(string[] args)
        {
            AutofacInit();

            TestMethod();

            Console.ReadLine();
        }

        #region 在应用的启动地方构造Autofac容器并注册依赖
        // 定义容器
        private static IContainer Container { get; set; }

        /// <summary>
        /// 初始化Autofac
        /// </summary>
        private static void AutofacInit()
        {
            var builder = new ContainerBuilder();

            // 注册依赖
            builder.RegisterType<LogInterceptor>(); // 注册拦截器
            builder.Register<Dog>(c => new Dog ()).As<IAnimal>().EnableInterfaceInterceptors();
            builder.RegisterType<Pig>().Named<IAnimal>("Pig").EnableInterfaceInterceptors();
            builder.RegisterType<Cat>().Named<IAnimal>("Cat").EnableInterfaceInterceptors();
            builder.RegisterType<AnimalManager>();

            Container = builder.Build();
        }
        #endregion

        #region 测试方法
        public static void TestMethod()
        {
            using (var scope = Container.BeginLifetimeScope())
            {
                var dog = scope.Resolve<AnimalManager>();
                dog.Test("para");

                var pig = scope.ResolveNamed<IAnimal>("Pig");
                pig.Test("para");

                var cat = scope.ResolveNamed<IAnimal>("Cat");
                cat.Test("para");
            }
        }
        #endregion
    }
}

运行结果:

 

 

参考资源

https://www.cnblogs.com/tomorrow0/p/14298352.html

标签:Autofac,RegisterType,builder,public,AOP,using,控制台,void
来源: https://www.cnblogs.com/tomorrow0/p/14299360.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有