zoukankan      html  css  js  c++  java
  • Autofac应用总结

    准备:

        public interface IDAL
        {
            void Insert(string commandText);
        }
        public class SqlDAL : IDAL
        {
            public void Insert(string commandText)
            {
                Console.WriteLine("使用sqlDAL添加相关信息");
            }
        }
        public class OracleDAL : IDAL
        {
            public void Insert(string commandText)
            {
                Console.WriteLine("使用OracleDAL添加相关信息");
            }
        }
        public class DBManager
        {
            IDAL _dal;
            private string Name;
            public DBManager(IDAL dal)
            {
                _dal = dal;
            }
            public DBManager(string name, IDAL _dal)
            {
                Name = name;
                this._dal = _dal;
            }
            public void Add(string commandText)
            {
                _dal.Insert($"Name-{Name}:{commandText}");
            }
        }
    

      

    2,应用

     var builder = new ContainerBuilder();
           //注册类型 builder.RegisterType<DBManager>();
           //注册类型及其实例 builder.RegisterType<SqlDAL>().As<IDAL>(); //命名注册 builder.RegisterType<SqlDAL>().Named<IDAL>("sql"); builder.RegisterType<OracleDAL>().Named<IDAL>("oracle"); using (var container = builder.Build()) { var manager = container.Resolve<DBManager>(); manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')"); SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql"); OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle"); //在解析实例时给其赋值 var manager1 = container.Resolve<DBManager>(new NamedParameter("name", "SQL")); manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')"); }

      常用方法:

    AutoFac常用方法说明

    (1)builder.RegisterType<Object>().As<Iobject>():注册类型及其实例。例如下面就是注册接口IDAL的实例SqlDAL

    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<SqlDAL>().As<IDAL>();
    IContainer container = builder.Build();
    SqlDAL sqlDAL = (SqlDAL)container.Resolve<IDAL>();

    (2)IContainer.Resolve<IDAL>():解析某个接口的实例。例如上面的最后一行代码就是解析IDAL的实例SqlDAL

    (3)builder.RegisterType<Object>().Named<Iobject>(string name):为一个接口注册不同的实例。有时候难免会碰到多个类映射同一个接口,比如SqlDAL和OracleDAL都实现了IDAL接口,为了准确获取想要的类型,就必须在注册时起名字。

    builder.RegisterType<SqlDAL>().Named<IDAL>("sql");
    builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");
    IContainer container = builder.Build();
    SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");
    OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle");

    (4)IContainer.ResolveNamed<IDAL>(string name):解析某个接口的“命名实例”。例如上面的最后一行代码就是解析IDAL的命名实例OracleDAL

    (5)builder.RegisterType<Object>().Keyed<Iobject>(Enum enum):以枚举的方式为一个接口注册不同的实例。有时候我们会将某一个接口的不同实现用枚举来区分,而不是字符串,例如:

    public enum DBType{ Sql, Oracle}
    builder.RegisterType<SqlDAL>().Keyed<IDAL>(DBType.Sql);
    builder.RegisterType<OracleDAL>().Keyed<IDAL>(DBType.Oracle);
    IContainer container = builder.Build();
    SqlDAL sqlDAL = (SqlDAL)container.ResolveKeyed<IDAL>(DBType.Sql);
    OracleDAL oracleDAL = (OracleDAL)container.ResolveKeyed<IDAL>(DBType.Oracle);

    (6)IContainer.ResolveKeyed<IDAL>(Enum enum):根据枚举值解析某个接口的特定实例。例如上面的最后一行代码就是解析IDAL的特定实例OracleDAL

    (7)builder.RegisterType<Worker>().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式

    (8)builder.RegisterType<Worker>().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例

    (9)IContainer.Resolve<T>(NamedParameter namedParameter):在解析实例T时给其赋值

    3,Asp.net MVC中应用

    引入Autofac.Integration.Mvc.dll

    var builder = new ContainerBuilder();
                builder.RegisterType<SqlDAL>().As<IDAL>();
                builder.RegisterControllers(Assembly.GetExecutingAssembly());
                var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    

      Controller中应用

            private IDAL iDal;
            public HomeController(IDAL iDal)
            {
                this.iDal = iDal;
            }
    

      

  • 相关阅读:
    web.xml中listener、 filter、servlet 加载顺序及其详解 从零开始
    网站运营之门外汉并且伪理解
    win7 旗舰版 64位注册dll(regsvr32)失败解决方法
    盖是乱盖,书童逆天之初创互联网企业常见弊病
    VirtualBox中安装Windows10
    jupyter导出pdf文件的方法
    com.ibm.mm.sdk.common.DKUsageError: DGL3616A: 发生意外的 SQL 错误; ICM7015: 在库服务器的 SQL 操作期间,发生意外错误。有关错误的详细信息,请参阅数据库文档。 (STATE) : [LS RC = 7015, SQL RC = 100
    Tomcat编译java文件没有同步问题
    Google APPS申请指南
    如何用C#语言构造蜘蛛程序
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/7992241.html
Copyright © 2011-2022 走看看