gpt4 book ai didi

c# - 使用 ServiceStack Funq IoC : how dependencies are injected?

转载 作者:太空狗 更新时间:2023-10-30 00:31:55 25 4
gpt4 key购买 nike

我有 WinForm 应用程序,我想使用 ServiceStack 依赖注入(inject)机制:

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

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

其余代码:

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

public interface IAppApplicationContext
{
}

public class AppApplicationContext : IAppApplicationContext
{
}

最佳答案

您需要调用 AutoWire 让容器注入(inject)依赖项。您可以像这样在 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 会在请求管道期间在幕后发生。

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

关于c# - 使用 ServiceStack Funq IoC : how dependencies are injected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com