- linfupart4_samples.zip
- Simple.IoC.Examples
- bin
- Simple.IoC.dll
- Simple.IoC.Loaders.dll
- ConstructorInjection
- DependencyInjectionSample
- Extensibility
- PropertyInjectionSample
- Simple.IoC.Examples.sln
- linfu_src.zip
- LinFu.Common
- LinFu.Delegates
- LinFu.DynamicProxy
- LinFu.License.txt
- LinFu.Reflection
- NMock2.dll
- nunit.core.dll
- nunit.framework.dll
- Simple.IoC
- Simple.IoC.Loaders
- Simple.IoC.Tests
- Simple.IoC
- linfu_bin.zip
- LinFu.Common.dll
- LinFu.Delegates.dll
- LinFu.DynamicProxy.dll
- LinFu.License.txt
- LinFu.Reflection.dll
- NMock2.dll
- nunit.core.dll
- nunit.framework.dll
- Simple.IoC.dll
- Simple.IoC.Loaders.dll
|
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using LinFu.Common;
using LinFu.Delegates;
namespace LinFu.Reflection
{
internal class Binder : IObjectMethods, IObjectProperties
{
private object _target;
private readonly IMethodFinder _finder;
private DynamicObject _dynamicObject;
public Binder(object target, IMethodFinder finder, DynamicObject dynamicObject)
{
_target = target;
_finder = finder;
_dynamicObject = dynamicObject;
}
#region IObjectMethods Members
public CustomDelegate this[string methodName]
{
get
{
CustomDelegate result = delegate(object[] args)
{
if (_target == null)
throw new NullReferenceException("No target instance found!");
MethodInfo bestMatch =
_finder.Find(methodName, _target.GetType(), args);
object returnValue = null;
if (bestMatch == null)
{
bool handled = false;
returnValue = _dynamicObject.ExecuteMethodMissing(methodName, args, ref handled);
if (handled)
return returnValue;
throw new NotImplementedException();
}
try
{
returnValue = bestMatch.Invoke(_target, args);
}
catch (TargetInvocationException ex)
{
throw ex.InnerException;
}
return returnValue;
};
return result;
}
}
#endregion
#region IObjectProperties Members
object IObjectProperties.this[string propertyName]
{
get
{
string methodName = string.Format("get_{0}", propertyName);
IObjectMethods methods = this;
return methods[methodName]();
}
set
{
string methodName = string.Format("set_{0}", propertyName);
IObjectMethods methods = this;
methods[methodName](value);
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.