如何在Ninject&中将对象转换为包装器对象C#?

时间:2017-03-01 19:43:16

标签: c# ninject wrapper

我有一些没有接口的第三方类的包装类,我需要在一个相当SOLID的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;
        }
    }
}

我想要一个像

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

其中wrapped将是AWrapper的一个实例,a已传递给Instance

Ninject是否有办法做到这一点?要请求包装类接口,要包装的实例,并返回包装类?

(我很抱歉,我确定有更明确的方法可以提出这个问题,但如果我知道如何更好地问它,我也可能知道答案。:))

1 个答案:

答案 0 :(得分:1)

假设内核已经绑定,您可以使用ConstructorArgument来指定构造函数参数。构造函数参数的名称是该类的第一个参数。

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

其中wrapped将是AWrapper的实例,并且在构造函数中为a参数传递了instance