我正在尝试在我的域中的静态类中获取对容器的引用,以便我可以执行以下操作:
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);
}
}
我显然不能通过构造函数注入它,有没有其他方法我可以得到它的句柄所以我可以解决他们的注册?阅读一些文档并没有真正有用。任何帮助将不胜感激。
答案 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)
{
...
}
}