标签: unity-container

在Unity中有TryResolve吗?

ResolutionFailedException如果Resolve失败,怎么能让Unity不扔?

有类似的东西TryResolve<IMyInterface>吗?

var container = new UnityContainer();
var foo = container.TryResolve<IFoo>();
Assert.IsNull(foo);
Run Code Online (Sandbox Code Playgroud)

c# ioc-container unity-container

14
推荐指数
2
解决办法
8038
查看次数

新棱镜项目 - 使用MEF还是Unity?

我正在开始一个新的个人Prism 4项目.Reference Implementation目前使用Unity.

我想知道我是否应该使用MEF,或者只是保持Unity.

我知道有几个讨论提到这两个是不同的,它们确实有重叠,但如果我一直选择Unity,我会错过吗?

prism mef unity-container

14
推荐指数
2
解决办法
3342
查看次数

用Unity填充集合的方法

我有两个示例类

class ClassToResolve
{
    private List<CollectionItem> _coll;

    public ClassToResolve(List<CollectionItem> coll)
    {
        _coll = coll;
    }
}

class CollectionItem
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我需要解决ClassToResolve

var classToResolve = new ClassToResolve(
            new List<CollectionItem>()
                {
                    new CollectionItem(),
                    new CollectionItem(),
                    new CollectionItem()
                }

            );
Run Code Online (Sandbox Code Playgroud)

现在我以某种方式解决它

var classToResolve = new ClassToResolve(
            new List<CollectionItem>()
                {
                    unity.Resolve<CollectionItem>(),
                    unity.Resolve<CollectionItem>(),
                    unity.Resolve<CollectionItem>()
                }
            );
Run Code Online (Sandbox Code Playgroud)

有没有办法使用动态注册解析ClassToResolve?

.net c# dependency-injection inversion-of-control unity-container

14
推荐指数
1
解决办法
8994
查看次数

如何在Moq中使用Unity.RegisterType?

我有一个统一的运行代码.

现在我想使用Moq对ASP-MVC进行单元测试.在global.asax的代码中,我有以下内容:

IUnityContainer container = new UnityContainer();
container.RegisterType<IFoo, Foo>(new InjectionConstructor("xxx"));
Run Code Online (Sandbox Code Playgroud)

现在我用Moq编写了测试代码:

IUnityContainer container = new UnityContainer();
var mockFoo = new Mock<IFoo>();
Run Code Online (Sandbox Code Playgroud)

container.RegisterType<IFoo, mockFoo) >(new InjectionConstructor("xxx"));

但这不起作用.

错误:类型'Moq.Mock'不能在泛型类型或方法'Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType中用作类型参数'TTo'...没有从'Moq.Mock'到内容的隐式引用转换'IFoo的'

moq unity-container

14
推荐指数
1
解决办法
6858
查看次数

Unity - 为同一个接口注入不同的类

我有一个接口:IFoo
两个实现该接口的类:FooOneFooTwo
两个类,ClassOne并在构造函数中ClassTwo接收一个IFoo参数.

我如何配置统一以便ClassOne接收一个FooOne实例并只ClassTwo接收FooTwo一个容器?

我不能在运行时这样做,所以它必须在配置文件中.

c# inversion-of-control unity-container

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

在弹出窗口中获取IOC容器

我在WPF应用程序中使用PRISM 5.而在我的应用程序壳牌观点有两个区域,为A和区域应该安放A包含一个弹出考虑它(PRISM 5交互功能是用来显示弹出式).

当我在视图的构造函数中创建弹出视图模型的实例时,应用程序正在工作.

工作代码

public PopupView()
{
    InitializeComponent();
    this.DataContext = new PopupViewModel(); // Working code
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用依赖注入创建视图模型实例时.应用程序InitializeComponent();在父视图(视图A)上失败 .

DI不工作代码

public PopupView(PopupViewModel viewModel)
{
    InitializeComponent(); // Failing in AView initialze
                           // before reaching here

    this.DataContext = viewModel;
}
Run Code Online (Sandbox Code Playgroud)

在module/bootstrapper中查看模型注册

container.RegisterType<AViewModel>();
Run Code Online (Sandbox Code Playgroud)

发生了错误

NULLReference发生异常

Stacktrace(编辑问题)

at System.DefaultBinder.BindToMethod(BindingFlags bindingAttr, MethodBase[] match, Object[]& args, ParameterModifier[] modifiers, CultureInfo cultureInfo, String[] names, Object& state)
   at MS.Internal.Xaml.Runtime.DynamicMethodRuntime.CreateInstanceWithCtor(Type type, Object[] args)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstance(XamlType xamlType, Object[] args)
   at MS.Internal.Xaml.Runtime.PartialTrustTolerantRuntime.CreateInstance(XamlType xamlType, Object[] args)
   at System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx)
   at …
Run Code Online (Sandbox Code Playgroud)

c# wpf prism unity-container prism-5

14
推荐指数
1
解决办法
939
查看次数

依赖注入统一 - 条件解析

有条件的解决是目前我​​还不了解的最后一件事.

让我们说我们有一个界面IAuthenticate:

public interface IAuthenticate{
    bool Login(string user, string pass);
}
Run Code Online (Sandbox Code Playgroud)

现在我有两种类型的身份验证.

Twitter认证

public class TwitterAuth : IAuthenticate
{
  bool Login(string user, string pass)
{
   //connect to twitter api
}

}
Run Code Online (Sandbox Code Playgroud)

Facebook Auth

public class FacebookAuth: IAuthenticate
{
  bool Login(string user, string pass)
{
   //connect to fb api
}

}
Run Code Online (Sandbox Code Playgroud)

在unity配置中注册类型:

unityContainer.RegisterType<IAuthenticate, TwitterAuth>();
unityContainer.RegisterType<IAuthenticate, FacebookAuth>();
Run Code Online (Sandbox Code Playgroud)

在我们的控制器中通过DI注入对象:

private readonly IAuthenticate _authenticate;

public AuthenticateController(IAuthenticate authenticate)
{
    _authenticate = authenticate;
}



// login with twitter
public virtual ActionResult Twitter(string user, string …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection inversion-of-control unity-container

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

如何调试Unity分辨率?

在WPF项目(带棱镜)中,我们使用UnityDI框架.

最近,在我们合并了两个大分支机构之后,我们无法启动我们的应用程序StackOverflowException.由于异常的性质,我们无法得到他的调用堆栈或当前值,我们只是因为命名空间而导致问题是来自Unity.

我们花了5个多小时才找到问题所在:

简化:

我们有3-4个服务(A,B,C和D),每个服务都有一个实现,并且在某些时候,服务A需要服务B,这需要服务C,这需要服务D ,这需要服务A).基本上是循环引用.

我们想知道是否有可能添加一些Unity尝试使用实现X解决服务A的日志,并且需要解析服务B,...

这将有助于我们调试此问题,直接查看哪些服务涉及此循环引用.

反正有没有实现这个目标?

c# wpf dependency-injection prism unity-container

14
推荐指数
2
解决办法
1786
查看次数

使用Unity使用额外参数创建对象

我正在使用Prism,它也是很好的Unity IoC容器.我是这个概念的新手,所以我还没有全力以赴.我现在要做的是使用IoC容器创建一个对象,但也传递一个额外的参数.请允许我用一个例子解释..:

我有一个接受命令对象的类.这是在IoC容器中注册的,因此它可以很好地处理它:

public class Person 
{
    public Person(IApplicationCommands commands) { .. }
    ..
}

Person person = _container.Resolve<Person>();
Run Code Online (Sandbox Code Playgroud)

现在 - 我想传递另一个论点 - 例如人的名字.但是,我仍然希望使用IoC容器来处理解析,从而从IoC容器中获取其他参数.但是将名称作为"自定义"参数传递.可以这样做吗?

public class Person 
{
    public Person(IApplicationCommands commands, string name) { .. }
    ..
}

string name = "John"; 
Person person = _container.Resolve<Person>(name); // ....?? 
Run Code Online (Sandbox Code Playgroud)

这个例子似乎不起作用,但有没有办法让它工作?或者Unity IoC容器是否要求在调用Resolve之前在容器中注册所有参数?

.net c# prism unity-container

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

Unity应用程序块2.0 - 给定的程序集名称或代码库无效

接口(在名为"Interfaces"的程序集中.在项目中: - 接口)

namespace Interfaces
{
    public interface IDoSomeWork1
    {
        string DoSomeWork1();
    }
}

namespace Interfaces
{
    public interface IDoSomeWork2
    {
        string DoSomeWork2();
    }
}
Run Code Online (Sandbox Code Playgroud)

依赖关系(在名为"实体"的程序集中.在项目中: - 实体)

namespace Entities
{
    public class ClassB : IDoSomeWork1
    {
        public string DoSomeWork1()
        {
            return this.ToString();
        }
    }
}

namespace Entities
{
    public class ClassC : IDoSomeWork2
    {
        public string DoSomeWork2()
        {
            return this.ToString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

类(在项目中: - UsingUnity)

public class ClassA
    {
        [Dependency]
        public IDoSomeWork1 DoSomeWork1 { get; set; }
        [Dependency] …
Run Code Online (Sandbox Code Playgroud)

c# enterprise-library unity-container

13
推荐指数
3
解决办法
5万
查看次数