Unity 解析基于 class 个请求实例
Unity resolve based on class requesting instance
我正在尝试在 Unity 中设置注册,但我无法准确获得我需要的内容。
假设我有以下定义:
public interface ISomeInterface { ... }
public interface ISomeDependency { ... }
public class DependencyA : ISomeDependency { ... }
public class DependencyB : ISomeDependency { ... }
public class SomeClassA : ISomeInterface
{
public SomeClassA(ISomeDependency dep){ ... }
}
public class SomeClassB : ISomeInterface
{
public SomeClassB(ISomeDependency dep){ ... }
}
然后我用Unity注册它们如下:
Container.RegisterType<ISomeDependency, DependencyA>("DependencyA");
Container.RegisterType<ISomeDependency, DependencyB>("DependencyB");
Container.RegisterType<ISomeInterface, SomeClassA>("ClassA");
Container.RegisterType<ISomeInterface, SomeClassB>("ClassB");
我还注册了一家工厂,它将根据密钥构建 ISomeInterface
。
Container.RegisterType<Func<string, ISomeInterface>(new InjectionFactory(c=>
{
return new Func<string, ISomeInterface>(x=>
{
return c.Resolve<ISomeInterface>(x)
}
}));
(顺便说一句,如果有人知道创建键控工厂的更好方法,我欢迎提供提示)
我如何配置 Unity,以便在 Unity 为我构建 SomeClassA 的实例时,它也会注入 DependencyA 的实例?同样,当Unity给我构建一个SomeClassB的实例时,它会注入一个DependencyB的实例。
感谢您的帮助。
编辑:更正了我的错字
如果您为一个接口注册两种具体类型,Unity 将不知道要解析为哪一种。您必须提供更多信息。一种方法是使用参数覆盖。
// Override the constructor parameter "dep" value
// Use DependencyA instead of other value
var result = container.Resolve<ISomeInterface>(
new ParameterOverride("dep", new DependencyA())
.OnType<SomeClassA>());
但是,您还注册了机器人 SomeClassA
和 SomeClassB
作为 ISomeInteface
的类型,因此您还必须告诉 Unity 您想要其中的哪一个实现你想要一个 ISomeInterface
.
我正在尝试在 Unity 中设置注册,但我无法准确获得我需要的内容。
假设我有以下定义:
public interface ISomeInterface { ... }
public interface ISomeDependency { ... }
public class DependencyA : ISomeDependency { ... }
public class DependencyB : ISomeDependency { ... }
public class SomeClassA : ISomeInterface
{
public SomeClassA(ISomeDependency dep){ ... }
}
public class SomeClassB : ISomeInterface
{
public SomeClassB(ISomeDependency dep){ ... }
}
然后我用Unity注册它们如下:
Container.RegisterType<ISomeDependency, DependencyA>("DependencyA");
Container.RegisterType<ISomeDependency, DependencyB>("DependencyB");
Container.RegisterType<ISomeInterface, SomeClassA>("ClassA");
Container.RegisterType<ISomeInterface, SomeClassB>("ClassB");
我还注册了一家工厂,它将根据密钥构建 ISomeInterface
。
Container.RegisterType<Func<string, ISomeInterface>(new InjectionFactory(c=>
{
return new Func<string, ISomeInterface>(x=>
{
return c.Resolve<ISomeInterface>(x)
}
}));
(顺便说一句,如果有人知道创建键控工厂的更好方法,我欢迎提供提示)
我如何配置 Unity,以便在 Unity 为我构建 SomeClassA 的实例时,它也会注入 DependencyA 的实例?同样,当Unity给我构建一个SomeClassB的实例时,它会注入一个DependencyB的实例。
感谢您的帮助。
编辑:更正了我的错字
如果您为一个接口注册两种具体类型,Unity 将不知道要解析为哪一种。您必须提供更多信息。一种方法是使用参数覆盖。
// Override the constructor parameter "dep" value
// Use DependencyA instead of other value
var result = container.Resolve<ISomeInterface>(
new ParameterOverride("dep", new DependencyA())
.OnType<SomeClassA>());
但是,您还注册了机器人 SomeClassA
和 SomeClassB
作为 ISomeInteface
的类型,因此您还必须告诉 Unity 您想要其中的哪一个实现你想要一个 ISomeInterface
.