【问题标题】:How to inject properties when using Castle Windsor使用 Castle Windsor 时如何注入属性
【发布时间】:2016-05-06 20:52:33
【问题描述】:

我是国际奥委会的新手。

我有 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 依赖关系,并使用以下方法正确解析构造函数依赖关系:

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

但不幸的是,我为解决属性依赖所做的任何尝试都不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • @qujck,不,不是。首先,我期待它的解决方案是针对温莎城堡而不是 Unity,其次是我见过的水法,是行不通的。我只期待 Castle Windsor (C#) 的代码。
  • 此外,该链接不能解决我的问题
  • 我同意该链接不能解决您的问题;它解释了为什么不能在运行时构造属性时将依赖项注入到属性中。
  • 不,我可以在互联网上看到这是可能的,我同意这是一种不好的做法,但我没有其他出路。我需要为我的属性解决这个问题,否则我无法继续

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


【解决方案1】:

您提供的链接仅描述了从容器解析的组件的属性注入。属性不是从容器中解析出来的,而是由 CLR 创建的。您可能可以通过提供自定义IContributeComponentModelConstruction 实现来设置属性属性,但我不太确定。请参阅here、here 和 here(来自 Windsor 的创建者)的类似问题的答案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多