Configuring Unity with a closed generic constructor parmater
- by fearofawhackplanet
I've been trying to read the article here but I still can't understand it.
I have a constructor resembling the following:
IOrderStore orders = new OrderStore(new Repository<Order>(new OrdersDataContext()));
The constructor for OrderStore:
public OrderStore(IRepository<Order> orderRepository)
Constructor for Repository<T>:
public Repository(DataContext dataContext)
How do I set this up in the Unity config file?
UPDATE: I've spent the last few hours banging my head against this, and although I'm not really any closer to getting it right I think at least I can be a little more specific about the problem.
I've got my IRespository<T> working ok:
<typeAlias alias="IRepository"
type="MyAssembly.IRepository`1,
MyAssembly" />
<typeAlias alias="Repository"
type="MyAssembly.Repository`1,
MyAssembly" />
<typeAlias alias="OrdersDataContext"
type="MyAssembly.OrdersDataContext,
MyAssembly" />
<types>
<type type="OrdersDataContext">
<typeConfig>
<constructor /> <!-- ensures paramaterless constructor used -->
</typeConfig>
</type>
<type type="IRepository" mapTo="Repository">
<typeConfig>
<constructor>
<param name="dataContext" parameterType="OrdersDataContext">
<dependency />
</param>
</constructor>
</typeConfig>
</type>
</types>
So now I can get an IRepository like so:
IRepository rep = _container.Resolve();
and that all works fine.
The problem now is when trying to add the configuration for IOrderStore
<type type="IOrderStore" mapTo="OrderStore">
<typeConfig>
<constructor>
<param name="ordersRepository" parameterType="IRepository">
<dependency />
</param>
</constructor>
</typeConfig>
</type>
When I add this, Unity blows up when trying to load the config file.
The error message is OrderStore does not have a constructor that takes the parameters (IRepository`1).
What I think this is complaining about is because the OrderStore constructor takes a closed IRepository generic type, ie OrderStore(IRepository<Order>) and not OrderStore(IRepository<T>)
I don't have any idea how to resolve this.