私は最近、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>();
});
完璧!ありがとう。 –