在静态类中引用IUnityContainer

时间:2012-07-31 23:52:24

标签: c# .net unity-container

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

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);
    }
}

我显然不能通过构造函数注入它,有没有其他方法我可以得到它的句柄所以我可以解决他们的注册?阅读一些文档并没有真正有用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

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

public class Order
{
    public void CancelOrder(IDomainEvents de)
    {
        ...
    }
}