私はMVCに精通していますが、WPFをNinjectで学習しようとしています。ある人が私にいくつかの例や参照を与えることができますか?NinjectをWPFアプリケーションで使用する方法
答えて
あなたのOPに私のコメントで言ったように、あなたが必要とするすべての情報はNinject documentationの中にあります。それは、あなたがNinjectやDIに慣れていないと膨大な文書の中に失われやすいと主張することができます。
this one私は特に有益だと思ったオンラインのチュートリアルがいくつかあります。 console application
を使用した例を提供していますが、どのように動作するのかは同じです。
アプリケーションタイプに関係なく、アプリケーションのエントリポイントでコンテナを設定します。
- コンソールアプリ -
Main
- WPF -
App
(あなたは独自のブートストラップを提供することができる場合には、フレームワークを使用していない限り) - ASP.NET - ノーアイデア、おそらく誰かが私に を啓発することができ私は
Ninject
か
DI
の権威であることを主張していない
免責事項、以下は、これらの2つのオブジェクトを理解するための簡単な例です。を互いに組み合わせて使用することができます。
たとえば、Ninjectのドキュメントで提供されている例を使用して作業してください。
1)Ninject
プロジェクト
3)オープンApp.xaml
への参照を追加するNinjectIoC
2)使用Nugetという名前のWPFアプリケーションを作成し、Application
からStartupUri
プロパティを削除要素を入力すると、App.xaml
は次のようになります。
<Application x:Class="NinjectIoC.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
</Application.Resources>
</Application>
StartupUri
プロパティは、アプリケーションが起動するときに最初に表示されるUIコントロールをWPF
アプリケーションに通知するためです。最初のUIコントロールを表示するには、Ninject
を使用します。
4)オープンApp.xaml.cs
。ここで、Ninject
container
、またはKernel
にNinject
という用語を使用するように設定します。アプリケーションOnStartup
をoverride
メソッドに設定して、container
を設定してから、必要に応じてアプリケーションを初期化します。
namespace NinjectIoC
{
using Ninject;
using System.Windows;
public partial class App
{
private IKernel container;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ConfigureContainer();
ComposeObjects();
Current.MainWindow.Show();
}
private void ConfigureContainer()
{
this.container = new StandardKernel();
container.Bind<IWeapon>().To<Sword>().InTransientScope();
}
private void ComposeObjects()
{
Current.MainWindow = this.container.Get<MainWindow>();
Current.MainWindow.Title = "DI with Ninject";
}
}
}
簡単explination:次のように見て、あなたのApp.xaml.cs
の内容を更新し
4.1)OnStartup - Override the
OnStartup method so that we may configure our
container`、我々が望むように、アプリケーションを初期化します。
4.2) - 私たちは私たちの具体的な種類を解決したいと思いますどのように私たちのcontainer
を通知します。私がこの例で表示したよりもはるかに多いですが、私が示した以上にこれ以上のことがあります。 Multi Binding、Binding Conventions、Kernel Modulesなどのトピックがありますが、official documentationから学ぶのが最も良いです。
4.3)ComposeObjects
は - 私たちはそれがMainWindow
のために使用したいUIコントロールをアプリケーションに通知しなければならないApp.xaml
からStartupUri
プロパティを削除しました。私たちのcontainer
にMainWindow
を私たちのMainWindow
として使用するように依頼するとともに、Title
も設定しました。繰り返しますが、ここで手動でオブジェクトを構成するための他のタスクを実行することもできます。
私は上記のようにステップを分ける必要はありません。この人為的な例では、気にしない方がいいでしょう。アプリケーションが大きくなり、container
でより洗練された処理を開始すると、いくつかのステージを切り離して、container
の設定をより管理しやすくします。選択はあなた次第です。
5)次オープンMainWindow.xaml
、コピーして、次を貼り付けます。
<Window x:Class="NinjectIoC.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="78" Width="362">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="269,10,0,0" VerticalAlignment="Top" Width="75" Click="Attack"/>
<TextBox x:Name="Target" HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" VerticalAlignment="Top" Width="254"/>
</Grid>
</Window>
何が起こっているかは明らかであろうと、私は上記を説明する気にはなりません。
6)最後にMainWindow.xaml.cs
開いて、次のように更新します。どのような上記の起こっていることNinject
のコンフィギュレーションとは何の関係もないよう
namespace NinjectIoC
{
using System.Windows;
public partial class MainWindow
{
private readonly IWeapon weapon;
public MainWindow(IWeapon weapon)
{
this.weapon = weapon;
InitializeComponent();
}
private void Attack(object sender, RoutedEventArgs e)
{
this.weapon.Hit(this.Target.Text);
}
}
public class Sword : IWeapon
{
public void Hit(string target)
{
MessageBox.Show(@"I swing and thrust my sword about like a mad man at " + target);
}
}
public interface IWeapon
{
void Hit(string target);
}
}
が再び私はこの短いを行いますし、それが再びする必要があります明らかに何が起こっている。
上記の注意点は、MainWindow
コンストラクタが予期しているargument
です。 IWeapon
。あなたは自分自身に尋ねているかもしれませんWeapon
の具体的な実装をどこにも作成していないので、どのように解決されますか?我々はそれがIWeapon
の依存関係を解決したいと思いますかcontainer
を知らせApp.xaml.cs
で方法中まあ
:
container.Bind<IWeapon>().To<Sword>().InTransientScope();
上記のどこにでも、それは私たちが希望IWeapon
の依存関係に遭遇することcontainer
を伝えますそれはWeapon
のインスタンスを提供する。使用して、container
決意(Get
)当初MainWindow
制御を要求されると、次の
Current.MainWindow = this.container.Get<MainWindow>();
container
は、そのコンストラクタを見ていたし、それが理解ほとんどの引数を持つコンストラクタを決定しました。この例では、IWeapon
の実装が必要なコンストラクタでしたが、container
はこの依存関係を解決する方法を知っています。なぜなら、それを以前の方法で行っていたからです。
あなたも私も上記のコードで間違いがないと仮定すると、F5
を押すとアプリケーションが起動し、TextBox
とButton
の小さなウィンドウが表示されます。 TextBox
に何かを入力してButton
を押すと、TextBox
に入力した人の誰でも何でも"mad man"
のように剣を振ったことを知らせるMessageBox
コントロールが表示されます。
私はここで説明しているよりもNinject
とDI
の両方にはるかに多くがあります。たとえば、DI
の件名に関する書籍全体がthis one by Mark Seemanなどです。
願わくば上記のように、あなたの冒険をさらに進展させるための基礎的な出発点として、Ninject
とDI
をお勧めします。
ああおかげであなたは、そんなにありがとう....あなたはより多くの私を助けて... –
@noviankristianto - 私は助けになることをうれしく思いますあなたは私の答えが有用であることが判明した場合、両方の自分自身と社会のためにupvoteかの答えとしてそれをマークするのいずれかを考えてみてください[: –
申し訳ありませんハハハ、行わ。あなたの答え –
- 1. ASP.NET MVCアプリケーションでNinjectを非MVCオブジェクトに使用する方法
- 2. InterceptAttributeを使用してNinjectインターセプトを使用する方法
- 3. MVVMでWPFアプリケーションのFolderBrowserDialogを使用する方法
- 4. WIXを使用してWPFアプリケーションを配備する方法
- 5. WPFでRichTextBoxを使用する方法
- 6. MVC3アプリケーションでカスタムロールプロバイダでNinjectを使用する
- 7. WPFアプリケーションのCPU使用量を削減する方法は?
- 8. NinjectのWPFアプリ
- 9. WPFアプリケーションでWebサービスを使用する
- 10. WPFアプリケーションでPIXを使用する
- 11. WPFアプリケーションでSendKeys.Sendメソッドを使用する
- 12. MapPointコントロールをWPFアプリケーションで使用する
- 13. Ninjectを使用してデコレータでバインディングを行う方法は?
- 14. EF CodeFirstを有効にしてWCFをWPFアプリケーションで使用する方法
- 15. 1つのWPFフォームを持つWinFormsアプリケーションでCaliburn Microを使用する方法
- 16. プログレスバーを使用してWPFアプリケーションで別のウィンドウを表示する方法
- 17. .NET 4 SplashScreenをWPF Prismベースのアプリケーションで使用する方法は?
- 18. MVC 3でNinjectを使用する最良の方法は何ですか?
- 19. アドホックビルドをアプリケーションで使用する方法
- 20. WindowsサービスでNinjectを使用する
- 21. WPFを使用したCrystal Report 2010アプリケーションの展開方法は?
- 22. MVPアプリケーションのWPFアプリケーションでリフレッシュとリセットを処理する方法
- 23. MVVMとVB6ユーザーコントロールを使用してWPFアプリケーションを構築する方法
- 24. Ninjectを使用してWPFに依存関係を注入する
- 25. wpf wpfアプリケーションのすべてのテキストボックスを取得する方法
- 26. WPFアプリケーションの選択方法フォントは常にターゲットマシンで使用できますか?
- 27. ツールボックスのコントロールをWinformアプリケーションとWPFアプリケーションの両方で使用できますか?
- 28. Windows WPFアプリケーション(vs2010)でSettings.settingsを使用
- 29. wpfアプリケーションでmvvmパターンを使用
- 30. ASP.netでのWPFユーザーコントロールの使用方法
Ninject [自分のサイトのドキュメントとGitHub](https://github.com/ninject/ninject/wiki/Getting-Started)を見ましたか? –
私はすでに自分のサイトを見ています。しかし、まだ理解していません。あなたの時間を無駄にしてごめんね。 –
それは問題ありません。あなたは何の問題を抱えていますか、これまで何を試していますか? –