簡體   English   中英

使用ServiceStack Funq IoC:如何注入依賴項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM