2010-11-09 5 views
1

J'essaie de faire quelque chose comme ça. Cependant, la méthode WithMetadata ne me laisse pas.Autofac TScanningActivatorData et WithMetadata

Est-ce un problème dans Autofac et est-ce que TScanningActivatorData dans les surcharges WithMetadata doit être changé en TActivatorData, ou est-ce que je m'approche de la mauvaise façon?

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

Cela me donne l'erreur sur la méthode tagmetadata: 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'.

Répondre

1

Il y a une surcharge plus approprié pour ce que vous essayez d'atteindre. Le paramètre t passé pour le délégué est le même que myType - de sorte que le code équivalent est:

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

La surcharge que vous avez cherché à est pour une utilisation avec les enregistrements de numérisation, par exemple lorsque vous utilisez RegisterAssemblyTypes() plutôt que RegisterType().

Espérons que cela aide. Nick

+0

Cela fonctionne thx !. Vous avez mentionné les enregistrements par balayage. Est-il possible de scanner une collection de types au lieu d'un assemblage? Ce serait encore plus parfait. – Danthar

+0

foreach (var t dans myTypes) {builder.RegisterType (t) ...} :) –

Questions connexes