C# Unity容器Ctor注入

发布于 2024-12-09 05:18:53 字数 534 浏览 0 评论 0原文

假设我们已经:

class A
{
   ILogger myLog;
   A(ILogger log)
   {
      this.myLog = log;
   }
 ...
}

并且我们之前已经在unity容器中注册了ILogger接口,例如

 container.RegisterType<ILogger, SomeLogger>();

这里是SomeLogger类:

class SomeLogger : ILogger
{
   string myString;
   SomeLogger(string test)
   {
     myString = test;
   }
 ...
}

现在,unity如何为类A创建SomeLogger的实例而不将字符串传递给SomeLogger的ctor? 假设 SomeLogger 没有其他 ctor。在哪里可以指定映射 SomeLogger 类型的 ctor 的参数?

Say we have:

class A
{
   ILogger myLog;
   A(ILogger log)
   {
      this.myLog = log;
   }
 ...
}

And we have registered the ILogger interface before in the unity container, e.g.

 container.RegisterType<ILogger, SomeLogger>();

And here the SomeLogger class:

class SomeLogger : ILogger
{
   string myString;
   SomeLogger(string test)
   {
     myString = test;
   }
 ...
}

Now, how can unity create an instance of SomeLogger for class A without passing a string to the ctor of SomeLogger?
Suppose there is no other ctor for SomeLogger. Where can one specify the parameter(s) for ctor of the mapped SomeLogger type?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

七堇年 2024-12-16 05:18:53

您可以在配置中执行此操作:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
    </configSections>
    <unity>
        <containers>
            <container>
                <types>
                    <type type="[Namespace].ILogger, [AssemblyName]" mapTo="[Namespace].SomeLogger, [AssemblyName]">
                        <constructor>
                            <param name="test">
                                <value value="MyDesiredValue" />
                            </param>
                        </constructor>
                    </type>
                </types>
            </container>
        </containers>
  </unity>
</configuration>

这也以声明方式注册您的类型,因此

container.RegisterType<ILogger, SomeLogger>();

不再需要调用。

-道格

You can do that in your configuration:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
    </configSections>
    <unity>
        <containers>
            <container>
                <types>
                    <type type="[Namespace].ILogger, [AssemblyName]" mapTo="[Namespace].SomeLogger, [AssemblyName]">
                        <constructor>
                            <param name="test">
                                <value value="MyDesiredValue" />
                            </param>
                        </constructor>
                    </type>
                </types>
            </container>
        </containers>
  </unity>
</configuration>

This also declaratively registers your type, so the

container.RegisterType<ILogger, SomeLogger>();

call is no longer necessary.

-Doug

画离情绘悲伤 2024-12-16 05:18:53

你可以这样做:

container.RegisterType<ILogger, SomeLogger>(new InjectionConstructor("myStringValue"));

You can do this:

container.RegisterType<ILogger, SomeLogger>(new InjectionConstructor("myStringValue"));
从﹋此江山别 2024-12-16 05:18:53

您也可以在注册代码中执行此操作,如下所示:

UnityContainer.RegisterType<ILogger, SomeLogger>();
UnityContainer.Configure<InjectedMembers>()
              .ConfigureInjectionFor<SomeLogger>(new InjectionConstructor("TestString"));

you could also do this in the registration code as follows:

UnityContainer.RegisterType<ILogger, SomeLogger>();
UnityContainer.Configure<InjectedMembers>()
              .ConfigureInjectionFor<SomeLogger>(new InjectionConstructor("TestString"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文