手动解决 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>();
}
}
是否可以在方法中创建一个 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>();
}
}