手动解决 Unity 依赖

Manual resolve Unity dependency

是否可以在方法中创建一个 Resolve<>,而不是在构造函数或 class 的 属性 中注入依赖项?

public void Foo()
{
    if (...)
        var context = Unity.Resolve<Context>();
}

这个想法是一个条件依赖解析,它使用 Unity 来管理在通常的 DI 用法中创建的对象的生命周期。 DI 设置在 Web Api 项目中,因此 MVC DependencyResolver.Current 将不起作用。

这不是个好主意。你的应用程序中唯一应该知道你的容器的部分是组合根。这是一个服务定位器的例子,它是一种反模式,因为没有明确声明依赖关系。

听起来你想引入一个可以通过构造函数注入来注入的工厂类型。

虽然有些人认为这是一种不好的模式,但您可以像这样实现一种简单的静态服务定位器模式:

public static class Unity
{
    private static IUnityContainer _container;

    public static void SetAppContainer(IUnityContainer container)
    {
        _container = container;
    }

    public static T Resolve<T>()
    {
        return _container.Resolve<T>();
    }
}