This may be a very naieve question, but I wonder if there is anyway to get away from strings when specifying properties and methods and get a bit more compile-time checking by specifying actual properties and methods on the objects themselves?

Chris' example:

container.Configure<InjectedMembers>()
.ConfigureInjectionFor<Foo>(
new InjectionConstructor(12, "Hello"),
new InjectionProperty("MyProperty"),
new InjectionProperty("MyStringProperty", "nifty"),
new InjectionMethod("InitializeMe", 42.0, new ResolvedParameter(typeof(ILogger), "SpecialLogger"));

might look like:

container.Configure<InjectedMembers>()
.ConfigureInjectionFor<Foo>(
new InjectionConstructor(12, "Hello"),
new InjectionProperty(Foo.MyProperty),
new InjectionProperty(Foo.MyStringProperty, "nifty"),
new InjectionMethod(Foo.InitializeMe, 42.0, new ResolvedParameter(typeof(ILogger), "SpecialLogger"));

It may not be possible or even be a good idea for other reasons, but I rather enjoy how other tools, like RhinoMocks, uses the strongly-typed notation as opposed to strings. Maybe we don't even have to mention
Foo over-and-over again in my example as well, since we know what we are configuring.