我对Autofac和国际奥委会的概念很陌生。我有下面的代码,我没有得到或理解它正在做什么。
`
public void AddComponentInstance<TService>(object instance, string key = "", ComponentLifeStyle lifeStyle = ComponentLifeStyle.Singleton)
{
AddComponentInstance(typeof(TService), instance, key, lifeStyle);
}
public void AddComponentInstance(Type service, object instance, string key = "",ComponentLifeStyle lifeStyle = ComponentLifeStyle.Singleton)
{
UpdateContainer(x =>
{
var registration = x.RegisterInstance(instance).Keyed(key, service).As(service).PerLifeStyle(lifeStyle);
});
}
public void UpdateContainer(Action<ContainerBuilder> action)
{
var builder = new ContainerBuilder();
action.Invoke(builder);
builder.Update(_container);
}
public static class ContainerManagerExtensions
{
public static Autofac.Builder.IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> PerLifeStyle<TLimit, TActivatorData, TRegistrationStyle>(this Autofac.Builder.IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> builder, ComponentLifeStyle lifeStyle)
{
switch (lifeStyle)
{
case ComponentLifeStyle.LifetimeScope:
return HttpContext.Current != null ? builder.InstancePerHttpRequest() : builder.InstancePerLifetimeScope();
case ComponentLifeStyle.Transient:
return builder.InstancePerDependency();
case ComponentLifeStyle.Singleton:
return builder.SingleInstance();
default:
return builder.SingleInstance();
}
}
}根据上面的代码,我理解的是,我们正在容器中注册Singleton实例,并且正在更新容器。我在网上搜索了IRegistrationBuilder接口示例,但没有得到令人满意的答案。
有谁能帮我理解IRegistrationBuilder.的概念吗?
我指的是来自NopCommerce应用程序的代码。提前谢谢。
发布于 2014-07-23 08:20:55
IRegistrationBuilder是在autofac中应用的构建器设计模式。看看这句话:
x.RegisterInstance(instance).Keyed(key, service).As(service).PerLifeStyle(lifeStyle);这一系列的方法定义了对特定对象的状态的注册。所使用的每种方法都设置用于正确注册的属性。每个方法都返回实现IRegistrationBuilder的builder -它保存所有这些属性。因为PerLifeStyle接受作为第一个参数的IRegistrationBuilder,所以可以在上面的链中使用它来更改构建器属性--以防PerLifeStyle影响对象的实例化。因为PerLifeStyle返回IRegistrationBuilder,所以您可以在方法调用链的中间使用它,例如:
x.RegisterInstance(instance).PerLifeStyle(lifeStyle).Keyed(key, service).As(service)https://stackoverflow.com/questions/24828215
复制相似问题