1

根据https://code.google.com/p/autofac/wiki/Mvc3Integration#Filter_Attribute_Property_Injection,我正在使用Autofac填写我的过滤器的公共属性,效果很好。

直到我尝试对其中一个依赖项使用命名注册。我找不到办法做到这一点。我试图像这样手动注册我的过滤器:

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

在调用 RegisterFilterProvider 方法之前,但这不起作用。

有任何想法吗?如果这已在较新的版本中得到修复,我使用的是 2.5.2.830 版本。

谢谢, 科斯塔斯

4

1 回答 1

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);
}
于 2013-08-16T00:52:21.953 回答