2017-03-01 3 views
0

인터페이스가없는 일부 타사 클래스에 대한 래퍼 클래스가 있고이를 C# 코드의 매우 독창적 인 블록에서 참조해야합니다.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의 인스턴스가 될 것입니다

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

같은 기능을 원하고, 그것을 소유 Instance

합니까 Ninject에이 작업을 수행 할 수있는 방법을 a을 전달? 래퍼 클래스 인터페이스를 요청하려면 래핑 할 인스턴스와 래핑 된 클래스를 다시 가져 오겠습니까?

(내 사과, 나는이에게 물어 훨씬 더 명확한 방법이 확신 해요,하지만 난 더 잘 물어 방법을 알고 있다면, 나뿐만 아니라 답을 알고 있습니다. :))

+0

Ninject가 필요하지 않습니다. 새로운 AWrapper (new A {Name = "bob"})를 호출하면됩니다. – Steven

답변

1

가정하면 그 커널이 이미 바인드 된 경우 ConstructorArgument을 사용하여 생성자 인수를 지정할 수 있습니다. 생성자 매개 변수의 이름은 클래스의 첫 번째 인수입니다.

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

것은 wrappedAWrapper의 인스턴스가 될 것이며, 그것은 생성자 instance 매개 변수에 대한 a을 통과 한 경우.

관련 문제