1

我正在尝试在我的域中的静态类中获取对我的容器的引用,以便我可以执行以下操作:

public static class DomainEvents
{
    public static IUnityContainer Container { get; set; }

    // ...

    public static void Do<T>(T args) where T : IMyInterface
    {
        foreach (var s in Container.ResolveAll<IDoSomething<T>>())
            s.DoSomething(args);
    }
}

我显然不能通过构造函数注入它,有没有其他方法可以处理它,以便我可以解决他们的注册问题?阅读一些文档并没有真正的帮助。任何援助将不胜感激。

4

2 回答 2

2

为什么不直接将容器作为参数传递给函数呢?甚至更好的是,这看起来是扩展方法的不错选择。如果您将函数头更改如下,那么您应该可以直接在容器上调用 Do。即:container.Do(args);

public static void Do<T>(this IUnityContainer container, T args) where T : IMyInterface
{
    foreach (var s in container.ResolveAll<IDoSomething<T>>())
        s.DoSomething(args);
}
于 2012-08-01T00:04:56.910 回答
0

您可能正在练习领域驱动设计并DomainEvents从实体的方法中引用这个静态类。不幸的是,这使得对实体进行单元测试变得更加困难,因为您现在需要在测试中配置 Unity Container。

相反,在实体的方法上使用方法注入,并将IDomainEvents接口注入到需要它的方法中。虽然方法注入通常是次优的,但在处理实体时,构造函数和属性注入是不可能的,但方法注入使代码能够松散耦合:

public class Order
{
    public void CancelOrder(IDomainEvents de)
    {
        ...
    }
}
于 2012-08-01T07:40:41.170 回答