标签: unity-container

System.Type参数上的ParameterOverride失败

我正在尝试使用ParameterOverrideUnity 2.0.只要我提供的参数不是System.Type,它就可以正常工作.

在下面的测试程序中,MyClass<T>当泛型参数T是int时,我使用整数参数注入构造函数,当T是System.Type时,我使用Type参数.在随后的输出中,您将看到它处理整数就好了,但似乎认为这typeof(MyClassForParam)是一个实际的MyClassForParam对象,而不是类型.有任何想法吗?

namespace UnityParameterOverride
{
    interface IMyClass
    {
    }

    public class MyClass<T> : IMyClass
    {
        public MyClass(T myParam)
        {
            Console.WriteLine("{0}", myParam);
        }
    }

    public class MyClassForParam
    {
        public MyClassForParam() { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer unity = new UnityContainer();
            try
            {
                // Works fine: prints 12345
                Console.WriteLine("Injecting an integer parameter.");
                unity.RegisterType<IMyClass, MyClass<int>>();
                unity.Resolve<IMyClass>(new ParameterOverride("myParam", 12345));

                // Fails: Seems to think that the parameter is an …
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection unity-container

7
推荐指数
1
解决办法
1741
查看次数

是否可以在控制器中获取当前的Unity容器

我注册了这样的统一容器:

    var container = new UnityContainer();

    container.RegisterType<ICacheManager, CacheManager>(new ContainerControlledLifetimeManager())
Run Code Online (Sandbox Code Playgroud)

是否可以从控制器访问此"容器"

c# unity-container

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

城堡windsor决议管道与Unity作为子解析器

简而言之,我试图将Castle Windsor容器与Unity容器联系起来.让我解释一下背景:

我有一个项目,很长一段时间它使用城堡windsor.几天前,我得到了一些我必须从我的旧项目中消耗/使用的dll.这些DLL使用Unity Container作为其注入机制.我也可以访问这些dll中的接口/实现,但我不会尝试实例化手动实现,但我更愿意,如果可能的话,将Unity容器与我当前的城堡windsor容器相关联.我怎么能实现这个目标?

所以,如果我有:

public class MyService: IService 
{
    public MyService (IThidPartyService thirdParty) 
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我IService和windsor IThirdPartyService一起解决,那么另一个容器要解决它会很好:Unity.

谢谢!.

c# castle-windsor ioc-container unity-container

7
推荐指数
1
解决办法
532
查看次数

我如何实现委托工厂?

Autofac的文档有一个有趣的页面,描述了它自动生成委托工厂的能力.它还强烈建议您在没有Autofac的情况下手动编写可以获得类似的结果.

我正在使用Unity for IoC并且希望避免将容器传递给需要创建其他对象的对象,那么如何在没有Autofac的情况下编写委托工厂?

c# factory inversion-of-control unity-container autofac

6
推荐指数
1
解决办法
4604
查看次数

Unity中的注册表等效项

是否有任何与Unity中的StructureMap的Registry类相同的东西?

我喜欢考虑一个层/组件/库来自我配置 - 从而填充容器.所以"父"层只需要知道注册类.

unity-container

6
推荐指数
1
解决办法
986
查看次数

如何使用unity来根据注入的类型有条件地绑定实例?

我已经习惯了Ninject,对于一个特定的项目,我被要求学习Unity.

有一件事我无法找到有关如何做的信息.

在Ninject我可以说:

Bind<IWarrior>().To<Samurai>().Named("Samurai");
Bind<IWarrior>().To<Ninja>().Named("Ninja");
Bind<IWeapon>().To<Katana>().WhenInjectedInto(typeof(Samurai));
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto(typeof(Ninja));
Run Code Online (Sandbox Code Playgroud)

然后,当一个人要求武士名为武士时,武士带有卡纳纳,忍者带有手里剑.正如它应该.

我不想在战士中引用容器以获得适当的武器,并且不希望用属性污染模型(在另一个没有引用ninject或统一的程序集中)

PD:我正在寻找一种代码方式,而不是通过xml配置.

ninject ioc-container unity-container

6
推荐指数
1
解决办法
786
查看次数

WCF,Unity:拆解一次性实例

我们已经设置了一个WCF服务,该服务使用Unity容器来解析用于管理Exchange 2010 Powershell命令的实例.我们定义了一个IExchangePowershell接口,它有一个实现IDisposable的具体实现.一段时间后,我们遇到了无法执行powershell命令的问题,因为服务器说已经有太多的PowerShell会话打开了.似乎我们从未真正处理过我们的powershell实例.具体的Powershell的Dispose()方法将负责关闭运行空间和会话.一旦我在存储库方法中调用它,我们就不会再出现错误了.

((IDisposable)this.powershell).Dispose();
Run Code Online (Sandbox Code Playgroud)

现在我当然不希望在每个存储库方法中显式调用dispose.我认为团结可以解决这个问题.我们的WCF实例提供程序执行此操作:

public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
    container.Teardown(instance);
}
Run Code Online (Sandbox Code Playgroud)

但这并没有真正处理IExchangePowershell实例.你知道如何自动处理这些实例吗?

wcf idisposable unity-container

6
推荐指数
1
解决办法
5180
查看次数

如何将特定于HTTP请求的对象注入到我提供的Unity对象中?

例如,我将"当前用户"存储在Session中.业务层对象由Unity实例化.如何让业务层对象知道"当前用户"?

asp.net-mvc dependency-injection unity-container asp.net-mvc-4

6
推荐指数
1
解决办法
1628
查看次数

Unity:无法构造InjectionPolicy类型

这是一个我几个小时都在苦苦挣扎的难题.这是背景:

  1. 我们Unity IoC在MVC4网络应用程序中使用
  2. 我们有一对ApiControllers (IHttpController)和一堆常规控制器(IController)
  3. 工作的解决方案IControllers很好
  4. 该解决方案IHttpControllers已经运行了好几个月,现在因类型解析错误而失败,其中包含详细信息" The type InjectionPolicy cannot be constructed. You must configure the container to supply this value"
  5. 常规控制器和Api控制器都采用具有ICustomerService依赖关系的依赖关系,该ICustomerRepository依赖关系又具有IClient依赖关系,但这些依赖关系都不是新的或不同的.
  6. ICustomerServiceApiController解决问题中删除依赖性(但该接口已明确配置并在其他地方工作)
  7. 我们已经在HttpControllerActivatorUnity中注册并拦截了解决IHttpControllers它的调用- 它在容器上失败.解析,即使查看容器,控制器显然也在那里.

我搜索了这个特定的错误并没有找到任何结果.有没有人见过它或它是否给你任何关于可能发生的事情的线索?

非常感谢!

更新:我已将其缩小到ICustomerRepository分辨率(再次,在所有其他流程中工作).错误是:

Resolving Xxx.CustomerRepository,(none) (mapped from Xxx.ICustomerRepository, (none))
    Resolving Microsoft.Practices.Unity.InterceptionExtension.PolicyInjectionBehavior,(none)
    Resolving parameter "policies" of constructor Microsoft.Practices.Unity.InterceptionExtension.PolicyInjectionBehavior(Microsoft.Practices.Unity.InterceptionExtension.CurrentInterceptionRequest interceptionRequest, Microsoft.Practices.Unity.InterceptionExtension.InjectionPolicy[] policies, Microsoft.Practices.Unity.IUnityContainer container)
      Resolving Microsoft.Practices.Unity.InterceptionExtension.InjectionPolicy[],(none)
Run Code Online (Sandbox Code Playgroud)

ioc-container inversion-of-control unity-container asp.net-mvc-4

6
推荐指数
0
解决办法
341
查看次数

ASP.NET MVC,Unity和IDisposable

我正在使用ASP.Net MVC 4,EF和Unity for DI.还使用UnitOfWork模式.试图找出实现这一目标的最佳方法.我有如下代码.我遇到的问题是Business和Repository层中的Dispose()现在永远不会被调用,只有两个中的Destructor被调用,所以对象似乎永远不会被处理掉.请回答以下问题

  1. 我是否真的需要Business和Repository层中的IDisposable实现(如果Unity已经在处理它)

  2. 我应该怎么做才能调用Dispose()(我应该将它添加到Controller中还是Dispose所有其他对象或使用某些特定的LifeTime管理器)

  3. 我是否应该使用每个的Singleton实例,或者将它放在每个请求中,就像它在Web环境中一样.

的Global.asax.cs:

private static IUnityContainer _unityContainer;

protected void Application_Start()
{
   _unityContainer = UnityBootstrapper.SetupUnity();
   _unityContainer.RegisterType<IController, ProductController>("Product");  
   DependencyResolver.SetResolver(new Microsoft.Practices.Unity.Mvc.UnityDependencyResolver(_unityContainer));
}  
Run Code Online (Sandbox Code Playgroud)

UnityBootstrapper.cs:

public class UnityBootstrapper
{
    public static IUnityContainer SetupUnity()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<IProductDbContext, ProductDbContext>()
                 .RegisterType<IUnitOfWork, UnitofWork>(new InjectionConstructor(new ResolvedParameter(typeof(IProductDbContext))))
                 .RegisterType<IProductRepository, ProductRepository>()
                 .RegisterType<IProductBusiness, ProductBusiness>();
    }
}
Run Code Online (Sandbox Code Playgroud)

ProductController.cs:

public class ProductController : ControllerBase
{
    private readonly IProductBusiness _productBusiness;        

    public ProductController(IProductBusiness productBusiness)
    {
        _productBusiness = productBusiness;
    }

    //No Dispose for this
}
Run Code Online (Sandbox Code Playgroud)

ProductBusiness.cs:

public class ProductBusiness …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection idisposable unity-container asp.net-mvc-4

6
推荐指数
1
解决办法
5521
查看次数