【问题标题】:Using HandlerAttribute in clients without referencing Unity but using own framework在客户端中使用 HandlerAttribute 而不引用 Unity 但使用自己的框架
【发布时间】:2015-11-21 00:51:05
【问题描述】:

我们正在构建一个使用 PolicyInjection 来执行某些任务的框架。我们为此使用属性。这段代码是在单独的框架解决方案中编写的。

Out CallHandler 可能如下所示:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Method)]
public class MyCallHandlerAttribute : HandlerAttribute
{
    ...
}

在 Unity 中我们有:

namespace Microsoft.Practices.Unity.InterceptionExtension
{
    public abstract class HandlerAttribute : Attribute
    {
        ...
    }
}

在客户端解决方案中,我们有一个使用 Unity 注册的调用处理程序 (MyCallHandler)。要在调用处理程序中执行代码,我们需要在模型的类/方法/属性上方添加属性:

[MyCallHandler(params[])]
public class MyModel : IMyModel
{
    ...
}

现在的问题是,要使用 MyCallHandler,我们需要对 PolicyInjection DLL 的引用,以便编译器了解 HandlerAttribute 是一个属性。如果没有引用,我们会收到 'MyCallHandler' is not an attribute class 警告(编译时出错)。

我们如何以这种方式实现这一点,而不需要在我们的客户端解决方案中引用 Unity DLL,而只需要我们的框架 DLL?

【问题讨论】:

    标签: c# unity-container


    【解决方案1】:

    好的。因此,经过一些研究并找到类似但更简单的示例后,我得出的结论是,除非您在项目中包含大量(如果不是全部)Unity 代码,否则这是不可行的。

    我所做的尝试是创建自己的策略注入行为,它只查找MyCallHandler 属性而不是任何HandlerAttribute。这意味着我可以让MyCallHandlerAttribute 实现Attribute 而不是HandlerAttribute。所以MyModel 知道MyCallHandlerAttribute 是一个属性。

    这很有效,但现在的问题是MyModel 不知道ICallHandler 是什么。同样,这是一个 Unity 定义的接口。这可能会在其他几件事上继续下去(IUnityContainer 等等)。

    如果有人感兴趣,我可以提供我所做的代码示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多