autofac如何注册静态方法里的接口对象

标题可能是不准确的,因为我不知道如何描述。不知道的原因,是对依赖注入一知半解。

Autofac可以自动注册对象实例到接口,人所尽知。而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构造函数里完成。

假如,我有些静态方法里,非要用到这些接口呢?怎么实例化它们?例如:

public static bool SetData()
{
    //这里需要用到实例化的某个对象,例如ILog
}

你当然可以将这个对象作为参数传递进来,如

public static bool SetData(Ilog log)

问题是,有时候并不方便将这个实例化对象传进来,原因可能是这个静态方法很多地方都在使用,要传这个实例对象,需要改好多地方;并且每个调用方,都要在自己的构造函数里加入这个接口作为参数(不然咋注册?)

最好的办法就是在这个静态方法里注册或获得实例对象

public static bool SetData()
{
    //在这里获得实例化对象,如
    ILog log = ....
}

但如何获取这个实例对象呢?new一个的话,autofac的优势就荡然无存了。之所以使用autofac,使用IOC容器,就是为了面向接口编程。如果从设计阶段就写死对象的实例化类型,就不叫面向接口编程了。

那么,如何实例化?

可以酱紫:

public static bool SetData()
{
    //DependencyResolver是System.MVC里的对象
    //下面这个表达式大意是,获得现行注册的对象类型,来实例化接口对象
    //换言之,这是autofac的手动实例化方式
    ILog log = DependencyResolver.Current.GetService<ILog>();
}

前提条件,是该实例化对象类型要在项目的初始化阶段注册,比如在ASP.NET MVC项目里的app_start事件里注册:

builder.RegisterType<MyLog>().As<ILog>().InstancePerLifetimeScope();

参考文章:
[Autofac怎么依赖注入ASP.NET MVC5类的静态方法]
(http://www.lanhusoft.com/Article/366.html)

转载于:https://www.cnblogs.com/leftfist/p/6808733.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Autofac中,可以使用`ConfigurationSettingsReader`类从配置文件中读取容器的配置信息。这个类提供了五个方法,用来读取不同类型的配置信息。这些方法分别是: 1. `RegisterAssemblies()`:从配置文件中读取所有的程序集,并将其中的类型注册到容器中。 2. `RegisterConfiguration()`:从配置文件中读取“configuration”节点,并将其中的配置信息注册到容器中。 3. `RegisterModules()`:从配置文件中读取所有的“module”节点,并将其中的模块注册到容器中。 4. `RegisterSection()`:从配置文件中读取指定名称的节点,并将其中的配置信息注册到容器中。 5. `RegisterServices()`:从配置文件中读取所有的“service”节点,并将其中的服务注册到容器中。 以下是一个示例代码,演示如何使用`ConfigurationSettingsReader`从配置文件中读取容器的配置信息: ```csharp var builder = new ContainerBuilder(); var reader = new ConfigurationSettingsReader("autofac"); builder.RegisterModule(reader.RegisterAssemblies()); builder.RegisterModule(reader.RegisterConfiguration()); builder.RegisterModule(reader.RegisterModules()); builder.RegisterModule(reader.RegisterSection("mySection")); builder.RegisterModule(reader.RegisterServices()); var container = builder.Build(); ``` 在上面的代码中,我们首先创建了一个Autofac的容器构建器(ContainerBuilder),然后创建了一个`ConfigurationSettingsReader`对象,并指定要读取的配置文件名为“autofac”。 接下来,我们使用`ConfigurationSettingsReader`对象的五个方法,分别从配置文件中读取程序集、配置信息、模块、指定名称的节点和服务,并将它们注册到容器中。 最后,我们调用容器构建器的Build()方法来创建一个Autofac容器。通过这个容器,我们就可以获取我们需要的对象实例了。 需要注意的是,Autofac的配置文件需要按照一定的格式编写,否则无法正确地读取配置信息。具体的格式要求可以参考Autofac的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值