2017-01-11 13 views
0

私は最近、UnityからAutofacに切り替えました。私のMVC ModelMetadataFilters依存関係を変換するのが難しいです。これらのフィルタは、すべてのインターフェイスIModelMetadataFilterでタグ付けされた後、ここにコンストラクタを介して注入する必要があります。Unity/StructureMapのインターフェイス登録を変換する

public ExtensibleModelMetadataProvider(IModelMetadataFilter[] metadataFilters) 
{ 
    _metadataFilters = metadataFilters; 
} 

私は以下のコードを試してみました。 ExtensibleModelMetadataProviderが登録されていますが、IModelMetadataFilterクラスは登録されていません。

builder.RegisterType<ExtensibleModelMetadataProvider>() 
     .As<ModelMetadataProvider>() 
     .InstancePerLifetimeScope(); 

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) 
     .Where(t => t.IsAssignableFrom(typeof(IModelMetadataFilter))) 
     .AsImplementedInterfaces() 
     .InstancePerLifetimeScope(); 

マイ統一コードは:

container.RegisterType<ModelMetadataProvider, ExtensibleModelMetadataProvider>(); 
container.RegisterTypes(
      AllClasses.FromLoadedAssemblies().Where(type => typeof(IModelMetadataFilter).IsAssignableFrom(type)), 
      WithMappings.FromAllInterfaces, 
      WithName.TypeName, 
      WithLifetime.Transient); 

私は(のStructureMap)以下のマット・ハニーのコードからこれを変換していた:

For<ModelMetadataProvider>().Use<ExtensibleModelMetadataProvider>(); 

Scan(scan => 
{ 
    scan.TheCallingAssembly(); 
    scan.AddAllTypesOf<IModelMetadataFilter>(); 
}); 

答えて

1

は、それが逆にIsAssignableFromの使用のように見えます。

あなたはもっと人間が読める、typeof(IModelMetadataFilter).IsAssignableFrom(t)またはAutofacが提供する拡張方法t.IsAssignableTo<IModelMetadataFilter>()のいずれかを使用する必要があります。

+0

完璧!ありがとう。 –

関連する問題