gpt4 book ai didi

c# - 检索 Autofac 容器以解析服务

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:20 24 4
gpt4 key购买 nike

在 C# WindowForms 应用程序中,我启动了一个 OWIN WebApp,它创建了我的其他类 Erp 的单例实例:

public partial class Engine : Form
{
const string url = "http://*:8080"; //49396
private IDisposable webApp;

public Engine()
{
InitializeComponent();
StartServer();
}

private void StartServer()
{
webApp = WebApp.Start<Startup>(url);
Debug.WriteLine("Server started at " + url);
}

private void btnDoSomething(object sender, System.EventArgs e)
{
// needs to call a method in erp
}
}

class Startup
{
public void Configuration(IAppBuilder app)
{
Trace.Listeners.Remove("HostingTraceListener");
app.UseCors(CorsOptions.AllowAll);

var builder = new ContainerBuilder();
var config = new HubConfiguration();
builder.RegisterHubs(Assembly.GetExecutingAssembly()).PropertiesAutowired();
var erp = new Erp();
builder.RegisterInstance<Erp>(erp).SingleInstance();
var container = builder.Build();
config.Resolver = new AutofacDependencyResolver(container);
app.UseAutofacMiddleware(container);
app.MapSignalR(config);
}
}

创建 WebApp 后,我想在代码的其他部分(即上面按钮的事件处理程序中)检索创建的单例 erp 实例。

据我所知,我需要使用 resolve 函数:

var erp = container.Resolve<Erp>();

但我不清楚如何在 Configuration 函数之外检索 container

最佳答案

我不会想太多。在某处设置一个静态变量并保持不变。

public static class ContainerProvider
{
public static IContainer Container { get; set; }
}

在 Startup 的代码块中:

var container = builder.Build();
ContainerProvider.Container = container;
config.Resolver = new AutofacDependencyResolver(container);

现在您可以在任何需要的地方获取容器。

关于c# - 检索 Autofac 容器以解析服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48216003/

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