2017-03-01 4 views
0

私は、インターフェイスを持たないサードパーティのいくつかのクラスのラッパークラスを持っています。これをC#コードのかなりSOLIDブロックで参照する必要があります。Ninject&C#でオブジェクトをラッパーオブジェクトに変換するには?

現在、インスタンスをラッパーインスタンスに変換する静的関数があります。

例コード。

class A 
{ 
    public string Name; 
} 

interface IAWrapper 
{ 
    string Name { get; set; } 
} 

class AWrapper : IAWrapper 
{ 
    private A Instance; 
    public AWrapper(A instance) 
    { 
     Instance = instance; 
    } 
    public string Name 
    { 
     get 
     { 
      return Instance.Name; 
     } 
     set 
     { 
      Instance.Name = value; 
     } 
    } 
} 

私はwrappedAWrapperのインスタンスになります、そしてそれはInstance

んNinjectのためaはこれを行う方法を持って渡された

var a = new A() {Name = "bob"}; 
var wrapped = kernel.wrap<IAWrapper>(a); 

のような機能をしたいですか?ラッパークラスのインターフェイス、ラップするインスタンス、およびラップされたクラスを取得するには?

(私の謝罪が、私はこれを聞いてはるかに明確な方法があると確信しているが、私はそれをよりよく依頼する方法を知っていたならば、私も答えを知っているかもしれません。:))

+0

これにはNinjectは必要ありません。あなたは単に 'new AWrapper(new A {Name =" bob "})'を呼び出すことができます。 – Steven

答えて

1

と仮定するとカーネルがすでにバインドされている場合は、ConstructorArgumentを使用してコンストラクタ引数を指定できます。 constructorパラメータの名前は、クラスの最初の引数です。 wrappedAWrapperのインスタンスになります、そしてそれは、コンストラクタでinstanceパラメータにaを渡された

var a = new A() { Name = "bob" }; 
var instance = new Ninject.Parameters.ConstructorArgument("instance", a); 
var wrapper = kernel.Get<IAWrapper>(instance); 

関連する問題