[英]Using ServiceStack Funq IoC: how dependencies are injected?
我有WinForm應用程序,我想使用ServiceStack依賴注入機制:
public class AppHost : AppHostBase
{
public AppHost()
: base("MyName", typeof(AppHost).Assembly)
{
}
public override void Configure(Container container)
{
container.RegisterAutoWiredAs<AppApplicationContext, IAppApplicationContext>();
}
}
然后在某個表單類中使用它:
public class SomeClass : AppBaseForm
{
public IAppApplicationContext AppApplicationContext { get; set; }
public SomeClass(IAppApplicationContext appApplicationContext)
{
AppApplicationContext = appApplicationContext;
}
public SomeClass()
{
}
}
但AppApplicationContext
始終為null
。 在無參數構造函數中,我寫道:
AppApplicationContext = AppHostBase.Resolve<IAppApplicationContext>();
然后每件事都行。 但這是正確的方法嗎? 我的意思是IoC不應該自動解決AppApplicationContext? 並且WinForm必須具有無參數構造函數。
其余代碼:
private static void Main()
{
var appHost = new AppHost();
appHost.Init();
}
public interface IAppApplicationContext
{
}
public class AppApplicationContext : IAppApplicationContext
{
}
您需要調用AutoWire
讓容器注入依賴項。 您可以在WinForm應用程序中使用它,如下所示:
public class SomeClass : AppBaseForm
{
public IAppApplicationContext AppApplicationContext { get; set; }
public SomeClass()
{
// Tell the container to inject dependancies
HostContext.Container.AutoWire(this);
}
}
當您使用常規ServiceStack服務時,當ServiceStack創建服務實例時, AutoWire
會在請求管道期間發生在幕后。
我在這里創建了一個完整的例子 。 注意:演示只是一個控制台應用程序,而不是WinForms,但它確實顯示了在ServiceStack服務之外使用的IoC,它的工作方式沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.