2017-01-11 5 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의 사용처럼 보인다.

사용자가 읽을 수있는 또는 Autofac이 제공 한 확장 방법 t.IsAssignableTo<IModelMetadataFilter>()을 사용해야합니다.

+0

Perfect! 감사. –