1

我们正在构建一个使用 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”不是属性类警告(编译时出错)。

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

4

1 回答 1

0

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

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

这就像一个魅力,但现在的问题是MyModel不知道是什么ICallHandler。同样,这是一个 Unity 定义的接口。IUnityContainer对于其他几件事(以及诸如此类),这可能会继续。

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

于 2013-04-16T08:31:07.167 回答