我不得不重新編寫一個大的WinForms應用程序,我想使用MVC來增加測試功能等。我還想將Ninject作爲IoC容器來使用是輕量級的,速度很快,並且會增加我的應用程序的可擴展性。構建一個使用MVC和Ninject作爲IoC容器的WinForms應用程序
我已經做了大量的閱讀,並且我已經成功地開始了這個新應用程序的開發。但是,我不確定在使用Ninject時我有正確的想法。該代碼...
與Program.cs文件和相關類開始...
static class Program
{
[STAThread]
static void Main()
{
FileLogHandler fileLogHandler = new FileLogHandler(Utils.GetLogFilePath());
Log.LogHandler = fileLogHandler;
Log.Trace("Program.Main(): Logging initialized");
CompositionRoot.Initialize(new ApplicationModule());
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(CompositionRoot.Resolve<ApplicationShellView>());
}
}
public class CompositionRoot
{
private static IKernel _ninjectKernel;
public static void Initialize(INinjectModule module)
{
_ninjectKernel = new StandardKernel(module);
}
public static T Resolve<T>()
{
return _ninjectKernel.Get<T>();
}
}
public class ApplicationModule : NinjectModule
{
public override void Load()
{
Bind(typeof(IApplicationShellView)).To(typeof(ApplicationShellView));
}
}
的我ApplicationShellView
是
public partial class ApplicationShellView : Form, IApplicationShellView
{
public ApplicationShellView()
{
InitializeComponent();
}
public void InitializeView()
{
dockPanel.Theme = vS2012LightTheme;
}
}
與接口
public interface IApplicationShellView
{
void InitializeView();
}
的控制器這個觀點是
public class ApplicationShellController
{
private IApplicationShellView view;
public ApplicationShellController(IApplicationShellView view)
{
view.InitializeView();
}
}
目前該控制器是多餘的,雖然此代碼的工作和我的視圖顯示,我有一些重要問題......
- 我應該使用
ApplicationShellController
來初始化我的形式,目前這是不是使用MVC「模式」? - 這感覺就像我寫了一個服務定位器,並從我讀到的,這是不好的。我應該如何使用Ninject for IoC來初始化我的應用程序?
- 任何其他建議,我正在做什麼對[如果有的話!] /錯?
非常感謝您的時間。
我認爲這個/類似的問題之前曾被問到過,特別是關於「服務定位器」。通常這個問題是/應該更多地關於如何與任何DI容器一起使用WinForms進行MVC ... – BatteryBackupUnit
這不是一個通用的問題。這是一個關於具體情況的問題。你怎麼能說它之前被問過?我的問題並不是專門針對服務定位器,而是如何將MVC與IOC容器相結合。 – MoonKnight
您可以舉個例子說明如何在沒有DI的情況下在ApplicationShellView中使用其他表單或服務? (我沒有體驗過winforms,我應該看到生活管理)。 –