[Autofac]自动装配

Autowiring 自动装配 
Autowiring increases the flexibility of an application  自动装配增加了应用程序的可伸缩性。
Autofac2
Updated   Aug 16, 2010  by   nicholas...@gmail.com

Autowiring is the process of creating components by selecting a constructor according to the services available in the container.

自动装配是通过选择容器中可用服务的构造函数来创建组件的过程。

This is done via reflection, so that in effect the container adapts its component creation behaviour to the configured environment.

它是通过反射来完成这个过程的,所以实际上容器适用于使用配置环境来创建组件的方式。

Choosing Constructors 选择构造函数

Autofac automatically chooses the constructor with the most parameters that are able to be obtained from the container.

Autofac自动从容器中选择参数最多的构造函数。

To select a different constructor, specify it when the component is registered:

为了选择一个不同的构造函数,需要在组件注册的时候就指明它:

builder.RegisterType(typeof(MyFoo)).UsingConstructor(typeof(int));

This example will use the MyFoo(int) constructor regardless of the other constructors that are available.

这个示例会使用构造函数MyFoo(int),而忽略其他可用的构造函数。

Additional Constructor Arguments 额外的构造函数参数

There are two ways that additional constructor arguments can be provided - at registration time and at resolve time. Both will be used when autowiring instances.

有2种方式可以提供额外的构造函数参数——在注册时和在解析时。自动装备实例时两者都会被用到。

At Registration 在注册时

Use the WithParameters() method to associate parameters with a component that will be used every time the component is created:

使用WithParameters方法将在每一次创建组件时和参数关联起来:

builder.RegisterType<MyFoo>()
  .WithParameters(
    new NamedParameter("message", "Hello!"),
    new NamedParameter("meaning", 42));

At Resolve 在解析时

You can pass Parameter instances to all of the Resolve() overloads.

你可以传递参数实例给所有重载的Resolve方法。

Precedence 优先级

Parameters provided at Resolve() time will override any other parameter with the same name.

在解析时提供的参数将覆盖任何同名的其他参数。

Parameters provided at registration will override any possible service matches that exist in the container.

在注册时提供的参数将覆盖在容器中可能存在的任何匹配的服务。

Making Autowiring Work for You 使用自动装配为你服务

By far the greatest use for Autowiring is cutting down on repetitive configuration. Wherever there are many similar components to register, Autowiring can be used with scanning:

到目前为止,自动装备最大的用处就是减少重复配置。无论哪里有许多相似的组件需要注册,都可以通过扫描的方式使用自动装配:

 

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.Load("Commands"))
    .As<ICommand>();

This doesn't preclude you from subsequently overriding one of these registrations to meet special requirements or improve performance:

这并不妨碍你随后为了满足特殊需求或者提高性能而重新注册来覆盖它们中的任何一个。

builder.Register(c => new HelpCommand(Settings.HelpFile));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值