Unity:在配置期间指定依赖关系名称
发布时间:2020-12-14 04:54:53 所属栏目:百科 来源:网络整理
导读:我有以下片段: static void Main(string[] args) { var container = new UnityContainer(); container.RegisterTypeIConnection,SerialPortConnection("SerialConnection"); container.RegisterTypeIConnection,ParallelPortConnection("ParallelConnection
我有以下片段:
static void Main(string[] args) { var container = new UnityContainer(); container.RegisterType<IConnection,SerialPortConnection>("SerialConnection"); container.RegisterType<IConnection,ParallelPortConnection>("ParallelConnection"); container.RegisterType<Device>("ParallelDevice"); container.RegisterType<Device>("SerialDevice"); } 我想在两个不同的名称下注册类型设备,因此根据请求的名称,设备实例将使用适当的连接进行初始化.以下是解决此问题的一种方法,仅用于演示: public class ParallelDevice : Device { public ParallelDevice([Dependency("ParallelConnection")] IConnection connection) : base(connection) {} } public class SerialDevice : Device { public SerialDevice([Dependency("ParallelConnection")] IConnection connection) : base(connection) {} } // and register with container.RegisterType<Device,ParallelDevice>("ParallelDevice"); container.RegisterType<Device,SerialDevice>("SerialDevice"); 有一个更好的方法吗?就像是: container.RegisterType<Device>("ParallelDevice").UseDependencyNames("ParallelConnection"); 解决方法
你可以这样做:
var container = new UnityContainer() .RegisterType<IConnection,SerialConnection>("SerialConnection") .RegisterType<Device,SerialDevice>(new InjectionConstructor( new ResolvedParameter<IConnection>("SerialConnection"))); 或者像这样: container .Configure<InjectedMembers>() .ConfigureInjectionFor<ParallelDevice>(new InjectionConstructor( new ResolvedParameter<IConnection>("ParallelConnection"))); This article有更多示例以及Unity的一些扩展,允许您编写如下测试: [Test] public void Should_inject_named_instance_of_encryption_provider() { var service = container.Resolve<MyService>(); AssertNamedInstanceWasResolved<IEncryptionProvider>("MyEncryptionProvider"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |