【问题标题】:How do I specify constructor parameters in my dependency injection container in Prism?如何在 Prism 的依赖注入容器中指定构造函数参数?
【发布时间】:2020-05-12 18:56:26
【问题描述】:

如何在我使用 Prism 配置的依赖项中注入构造函数参数?

我覆盖了RegisterTypes 以像这样注册我的依赖项:

public partial class App : PrismApplication
{
   protected override void RegisterTypes(IContainerRegistry containerRegistry)
   {
      containerRegistry.Register<IMyService, MyService>();        
   }
}

但是,MyService 有一些我需要能够传入的构造函数参数。我希望能够将构造函数参数传递给MyService,类似于我在 Unity 中这样做的方式。

containerRegistry.Register<IMyService, MyService>(
   new InjectionConstructor("param1", "param2"));

【问题讨论】:

    标签: c# wpf prism prism-7


    【解决方案1】:

    我会创建一个手动编码的IMyServiceFactory。这可以传递您的参数服务的潜在依赖项。

    public interface IMyServiceFactory
    {
        IMyService CreateMyService();
    }
    
    internal class MyServiceFactory : IMyServiceFactory
    {
        public IMyService CreateMyService() => new MyService( "param1", "param2" );
    }
    

    也看看this answer

    【讨论】:

    • Blegh,我希望有办法在没有工厂的情况下做到这一点,但我想我不走运。我喜欢你关于制作工厂internal 的建议。感谢您的回答。
    • 关于internal,您可以更加硬核,让产品成为工厂内的私人课程(如果您的测试要求允许的话)。
    • 关于工厂本身,将其视为对每个人的明确标志,“如果您使用它,产品就是您的。您有责任在使用完后将其处理掉。”我已经转向注入 Func&lt;Something&gt; 而不是 Something(具有短暂的生命周期),因为它明确了谁处置(消费者或容器)。
    【解决方案2】:

    另一种选择是注册一个实例:

    containerRegistry.RegisterInstance<IMyService>(new MyService("param1", "param2"));
    

    参考:Registering Types with Prism

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多