Autofac IContainer 测试

using Autofac;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AutofacDemo
{
    public interface ITest
    {
        string Hello1();
    }

    public class Test1 : ITest
    {
        public string Hello1()
        {
            Console.WriteLine("ok1");
            return "ok11";
        }
    }

    public class Test2 : ITest
    {
        public string Hello1()
        {
            Console.WriteLine("ok2");
            return "ok22";
        }
    }

    class Program
    {
        private static IContainer Container1 { get; set; }
        private static IContainer Container2 { get; set; }

        static void Main(string[] args)
        {
            var builder3 = new ContainerBuilder();
            builder3.RegisterType<Test1>().As<ITest>();
            var Container3 = builder3.Build();

            var builder1 = new ContainerBuilder();
            builder1.RegisterType<Test1>().As<ITest>();
            var Container1 = Container3;// builder1.Build();

            var builder2 = new ContainerBuilder();
            builder2.RegisterType<Test2>().As<ITest>();
            var Container2 = Container3;// builder2.Build();

            //using (var scope = Container1.BeginLifetimeScope())
            //{
            //    var test1 = scope.Resolve<ITest>();
            //    test1.Hello1();
            //}

            //using (var scope = Container2.BeginLifetimeScope())
            //{
            //    var test2 = scope.Resolve<ITest>();
            //    test2.Hello1();
            //}

            var test1 = Container1.Resolve<ITest>();
            test1.Hello1();

            var test2 = Container2.Resolve<ITest>();
            test2.Hello1();
            Console.WriteLine(Container1.GetHashCode());
            Console.WriteLine(Container2.GetHashCode());
        }
    }
}

结果是这两个hashcode相等

Console.WriteLine(Container1.GetHashCode());
Console.WriteLine(Container2.GetHashCode());
时间: 2024-08-25 14:04:59

Autofac IContainer 测试的相关文章

也说Autofac在MVC的简单实践:破解在Controller构造函数中的实例化 - winhu

相信大家对Autofac并不陌生,很多人都在使用.本文只是介绍一下本人在使用时的一点想法总结. 在使用一个框架时,肯定要去它的官网查阅一下.autofac的官网给出了一些经典的使用案例.如注册容器: var builder = new ContainerBuilder(); // Register individual components builder.RegisterInstance(new TaskRepository) .As<ITaskRepository>(); builder.

可扩展的 IOC(1)

引用 dll Microsoft.Practices.Unity.dll Autofac.dll IContainer  接口 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ctrip.HotelReservation.Ioc { public interface IContainer { TService Resolve<TService>();

从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入

一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 1 namespace Wchl.WMBlog.IRepository 2 { 3 public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo> 4 { 5 6 } 7 } 2.创建sysUserInfoRepository类继承BaseReposit

ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)

学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合. 本来想把NHibernate换成EF的,因为现在普通用的.net 4.0,但是.net 4.0里的EF对Oracle支持没那么好,.net4.5有了oracle新的驱动就挺好用了. 一点点心得,NHibernate也是刚熟悉,给像我一样的新手参考,一起学习,有什么不够合理的地方还请多多指教. 数

IoC容器Autofac正篇之解析获取(五)

解析获取的方式有如下几种: Resolve class Program { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<Class_1>(); //如果注释掉这句,下面Resolve时将会抛出异常 IContainer container = builder.Build(); Class_1 clas1 = container.Resolve<Cl

一、Autofac入门

想要将autofac集成到你的应用程序中需要经过如下步骤: 1.使用控制翻转(IoC)的思想架构你的应用程序: 2.添加autofac引用: 3.在应用程序入口...(At application startup...): 4.创建一个ContainerBuilder对象: 5.注册组件: 6.为以后的使用,生成并保存容器: 7.在应用执行期间...(During application execution...): 8.从容器中创建一个生命周期域: 9.使用生命周期域解析(resolve)组件

记录对依赖注入的小小理解和autofac的简单封装

首先,我不是一个开发者,只是业余学习者.其次我的文化水平很低,写这个主要是记录一下当前对于这块的理解,因为对于一个低水平 的业余学习者来说,忘记是很平常的事,因为接触.应用的少,现在理解,可能过段时间就会忘了,自己记录下来应该可以少走些弯路,以免从头再来查找资料. 另外,如果我的记录能帮忙到一些朋友的话,也难免会有些小满足的.学习的门槛除了理解能力,绝大部分来自于英文水平和专业术语,我希望的是我能用比较通俗易懂的表达,获得大家的理解,更希望大牛们是如是做的,所以写这个更希望的是能得到大牛的帮助.

C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理

在很多情况下,我们利用IOC控制反转可以很方便实现一些接口的适配处理,可以在需要的时候切换不同的接口实现,使用这种方式在调用的时候,只需要知道相应的接口接口,具体调用哪个实现类,可以在配置文件中动态指定,本篇主要介绍AutoFac的IOC组件的使用,用来实现微信接口处理的控制反转功能. 我们知道,实现IOC的方式有很多,如Unity.AutoFac.Ninject.Castle Windsor.Spring.NET等等,每种IOC组件均有自己的一些特点,我在之前的实体框架随笔系列介绍过Unity

从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简的实现前后台ajax表格展示及分页实现

本来是想试着做一个简单OA项目玩玩的,真是不做不知道,一做吓死人,原来以为很简单的事情,但是做起来不是忘这就是忘那的,有的技术还得重新温习.所以还是得记录.免得哪天电脑挂了,就全没有了. 开始是看了园子里何镇汐的一系列文章,写的太好了,只看了几篇就有想写代码的冲动,很大一部分都是搬他的东西.但是我还是领误不了DDD,所以先就着三层搞搞. 我搞了两个解决方案,一个本着是想做框架,把有通用的封装了,以后要用就引dll,由于太枯燥,另一个就是想做个玩具项目,两边轮流搞搞 先是dll部分的,当然很多都没