我正在尝试为我维护的框架为 Lamar 构建一个包。为了说明我对 StructureMap 的引用的意思,能够将运行时对象与 Service 抽象混合的相关方法是(将容器传递给该工厂类的构造函数的地方):
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!!!
}
拉马尔有其他方法吗?
这是我的注册码:
IContainer container = new Container(c =>
{
c.AddTransient<ISomeService, SomeService>();
c.Injectable<IMainView>();
c.AddTransient<MainPresenter>();
});
我创建了一个示例项目,它重新创建了可以在此处下载的问题。它使用 .NET 5
在该项目中,如果您在 class 中放置断点MainPresenter,您将看到IView参数为 null 并且OrdersService确实解析。
我需要将作为主要形式的具体对象也传入(作为IView)。
干杯