代碼示例:依賴注入 - 這個名字「綁定」不在當前情況下存在 - MethodAccessException了未處理
namespace DependencyInjection
{
class Program
{
static void Main(string[] args)
{
IKernel kernel = new StandardKernel();
var samurai = kernel.Get<Samurai>();
Bind<IWeapon>().To<Sword>();
}
}
class Samurai
{
readonly IWeapon _weapon;
public Samurai(IWeapon weapon)
{
_weapon = weapon;
}
public void Attack(string target)
{
_weapon.Hit(target);
}
}
interface IWeapon
{
void Hit(string target);
}
class Sword : IWeapon
{
public void Hit(string target)
{
Console.WriteLine("Sword - ", target);
}
}
class Arrow : IWeapon
{
public void Hit(string target)
{
Console.WriteLine("Arrow - ", target);
}
}
}
這是使用ninject實現DI我第一次嘗試。
我不確定如何解決錯誤「名稱'綁定'在當前上下文中不存在」。我經歷了這個問題Compilation Error with Ninject但仍不知道如何解決這個問題。這怎麼能解決。這將是巨大的,如果我能得到的代碼示例,這樣我可以理解更好
編輯:
namespace DependencyInjection
{
class Program
{
static void Main(string[] args)
{
IKernel kernel = new StandardKernel();
kernel.Bind<IWeapon>().To<Sword>();
var samurai = kernel.Get<Samurai>(); -----> Exception Line
samurai.Attack("Hello");
}
}
class Samurai
{
readonly IWeapon _weapon;
public Samurai(IWeapon weapon)
{
_weapon = weapon;
}
public void Attack(string target)
{
_weapon.Hit(target);
}
}
interface IWeapon
{
void Hit(string target);
}
class Sword : IWeapon
{
public void Hit(string target)
{
Console.WriteLine("Sword - ", target);
}
}
class Arrow : IWeapon
{
public void Hit(string target)
{
Console.WriteLine("Arrow - ", target);
}
}
}
上面的代碼會導致在線變種武士=內核「MethodAccessException是未處理」。得到();我搜索谷歌,但沒有找到任何具體的解決方案
異常
System.MethodAccessException was unhandled
Message="DependencyInjection.Sword..ctor()"
Source="Anonymously Hosted DynamicMethods Assembly"
StackTrace:
at DynamicInjector84db385a6cfb4301b146100b5027c44a(Object[])
at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<Resolve>b__4(IContext context)
at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target)
at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass1.<Create>b__0(ITarget target)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<Resolve>b__4(IContext context)
at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<CastIterator>d__aa`1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
at DependencyInjection.Program.Main(String[] args) in D:\Sandboxes\C_Sharp\DependencyInjection\DependencyInjection\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
你可以解決這個問題[使用Autofac](http://code.google。com/p/autofac /):) – bentayloruk 2011-05-28 11:15:12
@bentayloruk:你真的認爲Ninject是如此的破碎? – 2011-05-29 03:57:19
@ mauricio-scheffer不,我從來沒有用過Ninject。我曾希望笑容能夠表明存在一個笑話。 – bentayloruk 2011-05-29 11:34:28