gpt4 book ai didi

c# - 使用 Lamar 注入(inject)运行时对象

转载 作者:行者123 更新时间:2023-12-05 04:55:43 27 4
gpt4 key购买 nike

我正在尝试为我维护的框架为 Lamar 构建一个包。为了通过引用 StructureMap 来说明我的意思,能够将运行时对象与服务抽象混合的相关方法是(将容器传递给该工厂类的构造函数的地方):

public IPresenter Create(Type presenterType, Type viewType, IView viewInstance)
{
container.Configure(x => x.For(presenterType)
.Use(presenterType)
.Named(presenterType.Name)
);

var args = new ExplicitArguments();
args.Set("view");
args.SetArg("view", viewInstance);

return (IPresenter)container.GetInstance(presenterType, args);
}

我意识到 Lamar 没有实现 ExplicitArguments(很公平)。

我试过 Injectable 功能,但无法让它发挥作用:

public IPresenter Create(Type presenterType, Type viewType, IView viewInstance)
{
var c = _container.GetNestedContainer();
c.Inject(viewInstance);

// return c.GetInstance(presenterType, presenterType.Name.ToString()) as IPresenter; // BOOM!!!

return _container.GetInstance(presenterType) as IPresenter; // BOOM!!!
}

Lamar 有替代方法吗?

这是我的注册码:

IContainer container = new Container(c =>
{
c.AddTransient<ISomeService, SomeService>();
c.Injectable<IMainView>();
c.AddTransient<MainPresenter>();
});

我创建了一个示例项目,它重现了可能是 downloaded here 的问题.它使用.NET 5

在该项目中,如果您在 MainPresenter 类中放置一个断点,您将看到 IView 参数为 null 并且 OrdersService 确实解决了。

我还需要传入作为主要形式的具体对象(作为 IView)。

干杯

最佳答案

LamarPresenterFactory.Create 有问题方法 viewInstance参数

public IPresenter Create(Type presenterType, Type viewType, IView viewInstance)
{
}

我注意到它应该是 IMainView像下面这样输入

public IPresenter Create(Type presenterType, Type viewType, IMainView viewInstance)
{
var nestedContainer = _container.GetNestedContainer();
nestedContainer.Inject(viewInstance);

return nestedContainer.GetInstance(presenterType) as IPresenter;
}

nestedContainer.Inject(viewInstance)参数数据类型需要 viewInstance与用于 c.Injectable<IMainView>(); 的类型相同

我得到 OrdersService.GetOrders异常,因为没有 orders.zip文件可用

关于c# - 使用 Lamar 注入(inject)运行时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65263332/

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