zoukankan      html  css  js  c++  java
  • 关于autofac的一些具体的用法

     简介:Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器)

    1.nuget 引用

    2.创建两个类库项目,IService (用于编写接口),ServiceImpl(用于创建实现类)

    public class IService
    {
    public interface IAnimalBark
    {
    void Bark();
    }
    public interface IAnimalSleep
    {
    void Sleep();
    }

    public interface IUser
    {
    void AddNew(string name, string pwd);
    }

    public interface ISchool
    {
    void AfterSchool();
    }

    }

    实现类

    public class ServiceImpl :IService
    {
    public class Cat : IAnimalBark
    {
    public void Bark()
    {
    Console.WriteLine("喵喵喵");
    }
    }
    public class Dog : IAnimalBark, IAnimalSleep
    {
    public void Bark()
    {
    Console.WriteLine("汪汪汪汪汪");
    }

    public void Sleep()
    {
    Console.WriteLine("zZ,睡着了");
    }
    }
    public class User : IUser
    {
    public void AddNew(string name, string pwd)
    {
    Console.WriteLine("添加新的用户:" + name);
    }
    }

    public class School : ISchool
    {
    public IAnimalBark Dog { get; set; }
    public void AfterSchool()
    {
    Dog.Bark();
    Console.WriteLine("放学了");
    }
    }


    }

    //1.单个注册
    //ContainerBuilder builder = new ContainerBuilder();
    ////注册实现类Dog,当我们 请求IAnimalBark接口 的时候返回的是类Dog的对象,原理性的代码
    //builder.RegisterType<Dog>().As<IAnimalBark>();
    //IContainer container = builder.Build();
    ////请求接口
    //IAnimalBark bark = container.Resolve<IAnimalBark>();//解析
    //bark.Bark();
    //Console.ReadKey();
    //2.多个注册 直接可以注册程序集名称

    //ContainerBuilder builder = new ContainerBuilder(); //容器
    //var atype = typeof(ServiceImpl);
    // string namespacea=atype.Assembly.ToString();
    //Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
    //builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces();//常用
    //IContainer container = builder.Build();
    //IAnimalBark bark = container.Resolve<IAnimalBark>();
    //IUser user = container.Resolve<IUser>();
    //bark.Bark();
    //user.AddNew("B1111","123");

    //3..如果有多个实现类,container.Resolve<IAnimalBark>();只会返回其中一个对象
    //,如果想返回多个类的对象,应改成container.Resolve<IEnumerable<IAnimalBark>>();

    //ContainerBuilder builder = new ContainerBuilder(); //容器
    //var atype = typeof(ServiceImpl);
    //string namespacea = atype.Assembly.ToString();
    //Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
    //builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces();//常用
    //IContainer container = builder.Build();
    ////返回一个接口
    //IEnumerable<IAnimalBark> animals = container.Resolve<IEnumerable<IAnimalBark>>();
    //foreach (var a in animals) {
    // a.Bark();
    ////}
    //4.如果一个实现类中定义了其他类型的属性(接口类型的属性),在注册时又加上builder.RegisterAssemblyType
    // s(asm).AsImplementedInterfaces().PropertiesAutowired(); 这样会给属性进行“注入”

    ContainerBuilder builder = new ContainerBuilder(); //容器
    var atype = typeof(ServiceImpl);
    string namespacea = atype.Assembly.ToString();
    Assembly asm = Assembly.Load(namespacea);//实现类所在的程序集名称
    builder.RegisterAssemblyTypes(asm).AsImplementedInterfaces().PropertiesAutowired();//常用 允许属性写入
    IContainer container = builder.Build();
    //返回一个接口
    ISchool school = container.Resolve<ISchool>();
    school.AfterSchool();
    //如果一个接口 有多个实现方法,调用会以最后一个实现的方法为准

    //自定义生命周期       

    //SingleInstance 每次resolve返回同一个对象 InstancePerDependency每次返回新的实例

  • 相关阅读:
    2.Servlet基础
    3.AOP入门1
    1.Tomcat配置
    Linq学习(一)-初涉Linq
    Linq学习(零)-错误汇总
    Intellij IDEA14配置
    大数据插入Excel报错处理
    VS插件-Resharper
    SVN异常处理(五)-状态小图标不见了
    SVN系列学习(四)-TortoiseSVN其他操作
  • 原文地址:https://www.cnblogs.com/dashanboke/p/10791240.html
Copyright © 2011-2022 走看看