2012-09-05 50 views
1

根據https://code.google.com/p/autofac/wiki/Mvc3Integration#Filter_Attribute_Property_Injection,我使用Autofac填充我的過濾器的公共屬性,它運行得非常好。在帶有MVC的autofac中使用命名註冊屬性注入

直到我試圖使用一個命名註冊的依賴之一。我找不到辦法做到這一點。我試圖手動註冊我的過濾器,像這樣:

builder.RegisterType<MyCustomAttribute>() 
     .WithProperty(ResolvedParameter.ForNamed<INamedDependency>("dependencyName")); 

調用RegisterFilterProvider方法之前,但沒有奏效。

任何想法?如果這個問題已經在新版本中修復,我使用的版本是2.5.2.830。

感謝, 科斯塔斯

回答

0

可能是你忘記了你的貨櫃註冊INamedDependency例如:

public class MyCustomAttribute : FilterAttribute 
{ 
    public IDependencyName DependencyName { get; set; } 
} 

public interface IDependencyName 
{ 

} 

public class DependencyName : IDependencyName 
{ 

} 

[Test] 
public void ResolveCustomTest() 
{ 
    // Arrange 
    var dependencyInstance = new DependencyName(); 
    var builder = new ContainerBuilder(); 
    builder.RegisterInstance(dependencyInstance).Named<IDependencyName>("dependencyName"); 
    builder.RegisterType<MyCustomAttribute>().WithProperty(ResolvedParameter.ForNamed<IDependencyName>("dependencyName")); 
    builder.RegisterFilterProvider(); 
    var root = builder.Build(); 

    // Act 
    var attr = root.BeginLifetimeScope("AutofacWebRequest").Resolve<MyCustomAttribute>(); 

    // Assert 
    Assert.AreEqual(attr.DependencyName, dependencyInstance); 
}