Недавно я переключился с 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);
Я конвертировали это из кода Matt Honeycutt в поле ниже (StructureMap):
For<ModelMetadataProvider>().Use<ExtensibleModelMetadataProvider>();
Scan(scan =>
{
scan.TheCallingAssembly();
scan.AddAllTypesOf<IModelMetadataFilter>();
});
Отлично! Благодарю. –