使用Castle Windsor时如何注入属性

时间:2016-05-06 09:07:54

标签: c#-4.0 dependency-injection inversion-of-control castle-windsor

我是IOC的新手。

我有MethodProfilerAspectAttribute属性,必须在任何类似的方法上应用

[MethodProfilerAspectAttribute(5)]
public void MethodName(){}

以下是MethodProfilerAspectAttribute

的实现
[Serializable]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class MethodProfilerAspectAttribute : OnMethodBoundaryAspect
{
        public ILogger logger { get; set; }
        public int x{get;set;}
        public MethodProfilerAspectAttribute(int x)
        {
            this.x=x;
        }
    public override void OnSuccess(MethodExecutionArgs args)
        {
            logger.CustomLogging("logMe");
            base.OnSuccess(args);
        }
}

我想使用Log4NetLogger解决我的ILogger依赖关系,Log4NetLogger通过使用以下命令正确注册并解析构造函数依赖关系:

container.Register(Component.For<ILogger>().ImplementedBy(typeof(Log4NetLogger)));

但不幸的是,无论我为解决属性依赖而尝试过什么,都无法正常工作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您提供的链接仅描述了从容器中解析的组件的属性注入。属性不是从容器中解析的,而是由CLR创建的。您可以通过提供自定义IContributeComponentModelConstruction实现来设置一种设置属性属性的方法,但我不太确定。查看类似问题的答案hereherehere(来自温莎的创作者)。

在任何情况下,属性都不是您想要放置功能的地方。它们应该是最小的,只是提供元数据。我在这里看到你试图在所有方法调用中提供某种功能。您可能需要考虑温莎的interceptors来提供类似的行为。