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

我正在尝试为我维护的框架为 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文件可用

https://stackoverflow.com/questions/65263332/

相关文章:

ansible - 我怎样才能访问另一台服务器的ansible facts?

python - 如何将路径参数转发到 VPC 链路端点?

typescript - 是否可以修改 TypeScript 中文字的推断类型?

docker - Docker 中 dotnet/aspnet :3. 1 的 list 条目中没有

php - 仅显示 MySQL 列值计数

macos - M1 MAC 的 opencv 问题 - OpenCV imshow 不起作用

docker - 如何在 VSCode devcontainer 中使用 minikube?

c# - EFCore5,使用 FromSqlRaw 和 [Owned] 属性

c# - HttpClient : This instance has already starte

reactjs - 如何强制更新功能组件?