标签: unity-container

懒惰的依赖注入解决方案

我有.net类我使用unity作为IOC来解析我们的依赖项.它尝试在开头加载所有依赖项.Unity中有一种方法(设置)允许在运行时加载依赖项吗?

.net dependency-injection unity-container

4
推荐指数
1
解决办法
4261
查看次数

Unity DI容器中所有对象的列表

有没有办法让我的DI容器中注册的所有对象的列表.ResolveAll给出了一个类型的列表,但我想要一个所有类型的通用列表

dependency-injection unity-container

4
推荐指数
1
解决办法
1100
查看次数

懒惰的依赖注册与统一

注1:我想说清楚:我不是试图延迟加载依赖项或注入延迟类型.

大多数(所有?)IoC容器都需要在容器中注册元数据,以描述在询问时应如何解析某些类型; 这包括接口的实现,对象的生命周期等.在过去几年中,基于流畅/约定的API已被添加到大多数(所有?)IoC容器中,这在提供此功能时减少了大量噪音元数据到容器.

使用ninject,我使用基于约定的方法来注册我的元数据,但我是按需提供,而不是预先.这样可以在集成测试场景中节省大量性能,您可以在其中创建~10个对象; 您将失去每次测试都必须注册整个应用程序依赖项的开销.

注意2:请不要告诉我不要在集成测试中使用IoC容器.

在可用时转向使用Microsoft组件存在一些压力,因此Unity正在我的视野中.我有基于约定的注册工作,但我无法弄清楚如何在Ninject中按需/懒惰地"发现"这个元数据.

我第一次尝试实现这个是在UnityContainer实例周围使用包装器,并在包装​​器上调用GetInstance(type)后,我可以查询容器以查看该类型是否已注册.如果没有,我可以调用我的约定,发现元数据,并注册类型.然而,这种方法只有一个层次; 如果该类型注入了更多依赖项,则每个依赖项都不会被反馈到GetInstance(type)方法中,因此,我的困境.

问题:我如何懒惰/按需添加类型注册到Unity?

Source会很好,但是指向容器中钩子的指针也同样好.我尝试了继承,但没有像Ninject那样覆盖.

.net dependency-injection ninject ioc-container unity-container

4
推荐指数
1
解决办法
3525
查看次数

WPF Prism为什么选择RegisterType?(带容器)

根据我的理解,棱镜的统一容器可以解决类型事件,如果它们尚未注册,这是否使_container.RegisterType有点无用?

谢谢!

wpf prism ioc-container unity-container

4
推荐指数
1
解决办法
3112
查看次数

无法从程序集'mscorlib加载类型'System.Reflection.IntrospectionExtensions'

我正在使用Unity IoC(Microsoft.Practices.Unity),我可以正常编译,但是我在运行时遇到以下错误:

Could not load type 'System.Reflection.IntrospectionExtensions' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Run Code Online (Sandbox Code Playgroud)

Unity版本是:3.0.1026.0

.Net 4和此版本的Unity之间是否存在兼容性问题.此外,使用Unity v2时出现相同的错误.如果是这样,我该如何解决这个问题呢?

编辑: 另外,我已经验证我的项目中引用了mscorlib.

.net c# inversion-of-control .net-4.0 unity-container

4
推荐指数
1
解决办法
9279
查看次数

Caliburn.micro与团结

目前我正在学习更多关于caliburn.micro的内容,这真是令人惊叹.

在我的小型演示项目中,有一些导航,有MEF和EventAggregator.

由于我想在一个已经使用统一的项目中使用caliburn.micro,我想使用Unity进行DI.

如何设置引导程序以使用Unity?

除了MindScape教程和codeplex页面上的任何好的教程都非常受欢迎.(除了我没有看到处理这种情况的合适的人)

c# wpf unity-container caliburn.micro

4
推荐指数
2
解决办法
2292
查看次数

创建配置节处理程序时发生错误

我有一个dot.NET 4.0 Web应用程序,其中定义了自定义部分:

<configuration>
    <configSections>
    <section name="registrations" type="System.Configuration.IgnoreSectionHandler, System.Configuration, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="true" restartOnExternalChanges="true" allowLocation="true"/>
    ....
Run Code Online (Sandbox Code Playgroud)

在web.config文件的末尾我有相应的部分:

  ....
  <registrations>
    .....
  </registrations>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我每次打电话System.Configuration.ConfigurationManager.GetSection("registrations");都会得到以下异常:

为注册创建配置节处理程序时发生错误:给定的程序集名称或代码库无效.(来自HRESULT的异常:0x80131047)(C:\ ...\web.config第13行)

我也在使用Unity,但不知道这是否与错误有关.

你以前遇到过这个错误吗?我该如何解决?我是否需要更换IgnoreSectionHandler其他东西?

c# asp.net web-config unity-container c#-4.0

4
推荐指数
2
解决办法
3万
查看次数

Unity注册非泛型接口的泛型类型

我的情景看起来(对我来说)很直接,但我找不到解决方案.

我有这种情况

public class Class<T> : IInterface where T : class
{ 

}
Run Code Online (Sandbox Code Playgroud)

接口不能通用(来自WCF lib.)

所以我想注册这样的界面

container.RegisterType(typeof (IInterface ), typeof (Class<>));
Run Code Online (Sandbox Code Playgroud)

然后用T解决它

我该怎么做?我错过了什么?

我的意图是做类似的事情

container.Resolve<IInterface>(/* specify T */);
Run Code Online (Sandbox Code Playgroud)

.net c# generics unity-container

4
推荐指数
2
解决办法
8561
查看次数

使用lambda表达式注册类型

我想知道如何在UnityContainer中实现这样的功能:

container.RegisterType<IDummy>(Func<IDummy>) // deferred resolution
Run Code Online (Sandbox Code Playgroud)

c# lambda unity-container

4
推荐指数
1
解决办法
1828
查看次数

Unity:当前类型是接口,无法构造

下面的代码开始

public interface IDataContextAsync : IDataContext
{
    Task<int> SaveChangesAsync(CancellationToken cancellationToken);
    Task<int> SaveChangesAsync();
}

public partial class DB1Context : DataContext{ }

public partial class DB2Context : DataContext{ }
Run Code Online (Sandbox Code Playgroud)

以下是UnityConfig文件。注意:我正在为ASP.Net MVC使用Nuget引导程序,以下是我的UnityConfig文件

        public static void RegisterTypes(IUnityContainer container)
    {           
        container
            .RegisterType<IDataContextAsync, DB1Context>("DB1Context", new PerRequestLifetimeManager())
            //.RegisterType<IDataContextAsync, DB2Context>("DB2Context", new PerRequestLifetimeManager())
            .RegisterType<IRepositoryProvider, RepositoryProvider>(
                new PerRequestLifetimeManager(),
                new InjectionConstructor(new object[] {new RepositoryFactories()})
            )
            .
            .
            .
            .
    }
Run Code Online (Sandbox Code Playgroud)

而且我得到以下错误:

当前类型Repository.Pattern.DataContext.IDataContextAsync是一个接口,无法构造。您是否缺少类型映射?

了解该命名实例不适用于我的UnityConfig。有想法吗?

提前致谢

c# asp.net-mvc unity-container asp.net-web-api

4
推荐指数
1
解决办法
2万
查看次数