5

我有 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>();

然后一切正常。但这是正确的方法吗?我的意思是 AppApplicationContext 不应该由 IoC 自动解决?并且 WinForm 必须有无参数的构造函数。

其余代码:

private static void Main()
{
    var appHost = new AppHost();
    appHost.Init();
}

public interface IAppApplicationContext
{
}

public class AppApplicationContext : IAppApplicationContext
{
}
4

1 回答 1

9

您需要调用AutoWire以让容器注入依赖项。您可以像这样在 WinForm 应用程序中使用它:

public class SomeClass : AppBaseForm
{
    public IAppApplicationContext AppApplicationContext { get; set; }

    public SomeClass()
    {
        // Tell the container to inject dependancies
        HostContext.Container.AutoWire(this);
    }
}

当您使用常规 ServiceStack 服务时,AutoWire当 ServiceStack 创建您的服务实例时,请求管道期间会在幕后发生。

我在这里创建了一个完整的工作示例注意:该演示只是一个控制台应用程序,而不是 WinForms,但它确实显示了在 ServiceStack 服务之外使用的 IoC,并且它的工作方式没有什么不同。

于 2014-02-01T09:29:24.933 回答