Autofac TScanningActivatorData和WithMetadata

时间:2010-11-09 08:59:57

标签: autofac

我正在尝试做这样的事情。但是WithMetadata方法不会让我。

这是Autofac中的一个问题,并且WithMetadata重载中的TScanningActivatorData是否应该更改为TActivatorData,或者我是以错误的方式接近这个?

builder.RegisterType(myType).As<IMyType().AsSelf().WithMetadata("somekey", delegate(Type t)
                {
                   //dosomething
                    return t;
                });

这给我带来了WithMetadata方法的错误:The type 'Autofac.Builder.ConcreteReflectionActivatorData' cannot be used as type parameter 'TScanningActivatorData' in the generic type or method 'Autofac.RegistrationExtensions.WithMetadata<TLimit,TScanningActivatorData,TRegistrationStyle>(Autofac.Builder.IRegistrationBuilder<TLimit,TScanningActivatorData,TRegistrationStyle>, string, System.Func<System.Type,object>)'. There is no implicit reference conversion from 'Autofac.Builder.ConcreteReflectionActivatorData' to 'Autofac.Features.Scanning.ScanningActivatorData'.

1 个答案:

答案 0 :(得分:1)

对于您想要实现的目标,有一个更合适的重载。传递给委托的t参数与myType相同 - 因此等效代码为:

var someValue = DoSomething(myType);
builder.RegisterType(myType)
    .As<IMyType>()
    .AsSelf()
    .WithMetadata("somekey", someValue);

您一直在寻找的超载用于扫描注册,例如:使用RegisterAssemblyTypes()而不是RegisterType()时。

希望这会有所帮助。 尼克