I have the following StructureMap registrations that work in version 2.6.4 and I'm finally upgrading to the latest SM (3.1.2 as of this writing). And need to update it since there doesn't appear to be a IContext.BuildStack anymore.
Here is the old working version with 2.6.4:
initialization.For(typeof(IRepository<,>))
.Use(context =>
{
var genericArgs = context.BuildStack.Current.RequestedType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1], repositoryName);
}
);
So I figured that changing it to this would work:
initialization.For(typeof (IRepository<,>))
.Use("IRepository<,>", context =>
{
var genericArgs = context.ParentType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1],
repositoryName);
}
);
But context.ParentType is null. When I look at context.RootType it is set to System.Object which is obviously not what I want.
My test code to get an instance of this repository is:
var userRepository = ObjectFactory.GetInstance<IRepository<User, Guid>>();
I don't see any other property that has this information, but I'm guessing I am missing something.