Внедрение зависимости, уже созданной с помощью Ninject - PullRequest
1 голос
/ 18 апреля 2011

Я хотел бы знать, как использовать Ninject для внедрения объекта в качестве зависимости, где этот объект уже был создан.У меня есть следующий код в моем методе WPF Window_Loaded в моем главном окне:

        IKernel kernel = new StandardKernel();
        kernel.Bind<ITeleStore>().To<TeleStore>();
        kernel.Bind<ITreeViewModel>().To<TreeViewModel>();

        var tst = kernel.Get<TeleStore>();

        // rootnode already exists and is obtained from the telestore component
        TstTreeNode rootNode = tst.GetRootNode();

        // how do I use ninject to inject rootnode?
        ITreeViewModel treeViewModel = new TreeViewModel(rootNode);

        base.DataContext = treeViewModel;

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Вы можете передать корневой узел в качестве аргумента запроса! Простой к следующему

public interfacte ITreeViewModel
{
    public TstTreeNode TestNode {get;}

    ........
    // Other members
}

// Sample Class
public class TreeViewModel : ITreeViewModel
{
    public TreeViewModel(TstTreeNode node) {
       TestNode = node;
    }

    // Implemented from interface
    public TstTreeNode TestNode {get; private set;}
}

// Your code
IKernel kernel = new StandardKernel();
kernel.Bind<ITeleStore>().To<TeleStore>();
kernel.Bind<ITreeViewModel>().To<TreeViewModel>();

var tst = kernel.Get<TeleStore>();

// rootnode already exists and is obtained from the telestore component
TstTreeNode rootNode = tst.GetRootNode();

// how do I use ninject to inject rootnode?
ITreeViewModel treeViewModel = kernel.Get<TreeViewModel>(new ConstructorArgument("node", rootNode));

Веселись!

0 голосов
/ 18 апреля 2011

Вы можете попробовать использовать свойство-инъекцию, чтобы установить значение "TstTreeNode" в классе TreeViewModel.Ниже приведен пример кода: -

    public interfacte ITreeViewModel
    {
        public TstTreeNode TestNode {get;set;}

        ........
        // Other members
    }

    // Sample Class
    public class TreeViewModel : ITreeViewModel
    {
        public TreeViewModel() {}

        // Implemented from interface
        public TstTreeNode TestNode {get;set;}
    }

    // Your code
    IKernel kernel = new StandardKernel();
    kernel.Bind<ITeleStore>().To<TeleStore>();
    kernel.Bind<ITreeViewModel>().To<TreeViewModel>();

    var tst = kernel.Get<TeleStore>();

    // rootnode already exists and is obtained from the telestore component
    TstTreeNode rootNode = tst.GetRootNode();

    // how do I use ninject to inject rootnode?
    ITreeViewModel treeViewModel = kernel.Get<TreeViewModel>();

    // Property Injection
    treeViewModel.TestNode = rootNode

    base.DataContext = treeViewModel;
...