0

Unity has a great feature providing a way to inject multiple implementations from a common interface.

The way it resolves a specific implementation is by name.

This is the example.

I would like to know how I could do the same thing with Spring.NET.

For example I have the following objects where both A and B resolvers use the same interface.

Follows the spring configuration:

<?xml version="1.0" encoding="utf-8"?>

<objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd http://www.springframework.net/aop http://www.springframework.net/xsd/spring-aop.xsd" xmlns:db="http://www.springframework.net/database" xmlns:aop="http://www.springframework.net/aop" xmlns:tx="http://www.springframework.net/tx">

    <object id="A" type="Program.Mappers.Resolvers.A, Program"></object>

    <object id="B" type="Program.Mappers.Resolvers.B, Program"></object>

</objects>

Spring.NET does not accept this because both objects use the same interface.

How can I solve it?

Community
  • 1
  • 1

1 Answers1

1

Any IApplicationContext is a IObjectFactory and this interface has methods to perform that.

//
// Summary:
//     Return an instance (possibly shared or independent) of the given object name.
//
// Parameters:
//   name:
//     The name of the object to return.
//
// Type parameters:
//   T:
//     The type of the object to return.
//
// Returns:
//     The instance of the object.
//
// Exceptions:
//   Spring.Objects.Factory.NoSuchObjectDefinitionException:
//     If there's no such object definition.
//
//   Spring.Objects.Factory.ObjectNotOfRequiredTypeException:
//     If the object is not of the required type.
//
//   Spring.Objects.ObjectsException:
//     If the object could not be created.
//
// Remarks:
//      This method allows an object factory to be used as a replacement for the
//     Singleton or Prototype design pattern.
//     Note that callers should retain references to returned objects. There is
//     no guarantee that this method will be implemented to be efficient. For example,
//     it may be synchronized, or may need to run an RDBMS query.
//     Will ask the parent factory if the object cannot be found in this factory
//     instance.
T GetObject<T>(string name);
  • Spring.Net was designed to improve IoC and DI capabilities, if many classes of your ecosystem are requesting dependencies from container, you are doing it wrong. – Luiz Carlos Faria Oct 18 '14 at 08:50