标签: unity-container

如何从Unity映射中删除(取消注册)已注册的实例?

我遇到了一个我现在无法解决的问题.我有以下内容:

UnityHelper.DefaultContainer.RegisterInstance(typeof(IMyInterface), "test", instance);
Run Code Online (Sandbox Code Playgroud)

UnityHelper.DefaultContainer我的助手在哪里获得带有加载配置的统一容器.

在这里我注册instance为一个实例IMyInterface.

所以在任何地方(使用后一段时间)我想删除此映射.完全删除它.我怎么能这样做?

我试过了:

UnityHelper.DefaultContainer.Teardown(instance)
Run Code Online (Sandbox Code Playgroud)

但是不成功,以下代码仍会返回instance:

UnityHelper.DefaultContainer.ResolveAll<IMyInterface>()
Run Code Online (Sandbox Code Playgroud)

c# instance ioc-container unity-container registering

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

Microsoft Unity.如何在构造函数中指定某个参数?

我正在使用Microsoft Unity.我有一个接口ICustomerService及其实现CustomerService.我可以使用以下代码为Unity容器注册它们:

container.RegisterType<ICustomerService, CustomerService>(new TransientLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

如果CustomerService在其构造函数中有某个参数(例如ISomeService1),我使用以下代码(我需要指定SomeService1):

container.RegisterType<ICustomerService, CustomerService>(new TransientLifetimeManager(), new InjectionConstructor(new SomeService1()));
Run Code Online (Sandbox Code Playgroud)

这里没问题.

CustomerService类在其构造函数中有两个参数(不是前一个示例中的一个参数)时会出现问题(例如ISomeService1ISomeService2).当我使用以下代码时它工作正常: container.RegisterType<ICustomerService, CustomerService>(new TransientLifetimeManager(), new InjectionConstructor(new SomeService1(), new SomeService2()));

问题是我不想指定SomeService2()第二个参数.我只想指定第一个参数 - SomeService1().但我得到的错误是我需要指定一个或两个参数.

如何只指定构造函数的第一个参数?

c# asp.net ioc-container unity-container

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

MEF是依赖注入框架吗?

最近宣布的.NET 4.0托管可扩展性框架(MEF)是一个依赖注入框架吗?模式和实践中的Microsoft Unity在4.0中是否会过时?MEF与Unity这样的框架相比如何?

.net mef unity-container

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

如何使用静态工厂方法创建对象?

我知道Unity可以配置为使用类的构造函数来创建类的实例(如下所示),但这不是我想要的.

container.RegisterType<IAuthoringRepository, AuthoringRepository>();
Run Code Online (Sandbox Code Playgroud)

我想将Unity配置为使用工厂方法,将windows身份作为参数传递(即RepositoryFactory.CreateAuthoringRepository(WindowsIdentity.GetCurrent()):),解析一种类型的IAuthoringRepository.我该怎么做呢?

c# unity-container

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

例外情况是:InvalidOperationException - 当前类型,是一个接口,无法构造.你错过了类型映射吗?

在我的引导程序中:

namespace Conduit.Mam.ClientServices.Common.Initizliaer
{
    public static class Initializer
    {
        private static bool isInitialize;
        private static readonly object LockObj = new object();
        private static IUnityContainer defaultContainer = new UnityContainer();

        static Initializer()
        {
            Initialize();
        }

        public static void Initialize()
        {
            if (isInitialize)
                return;

            lock (LockObj)
            {
                IUnityContainer container = defaultContainer;

                //registering Unity for MVC
                DependencyResolver.SetResolver(new UnityDependencyResolver(container));

                //registering Unity for web API
                //  GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

                #region managers
                container.RegisterType<ISettingsManager, SettingsManager>();

                container.RegisterType<IMamDataManager, MamDataManager>();

                container.RegisterType<IAppsDataManager, AppsDataManager>();
                #endregion

                if (!isInitialize)
                {
                    isInitialize = true;
                } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc inversion-of-control unity-container

32
推荐指数
3
解决办法
9万
查看次数

MVVM,Unity,Prism,MEF,Caliburn - 我应该使用什么?

请帮忙 - 我迷路了!

我正在编写一个小型桌面应用程序,它有一些控件和一些屏幕.这应该稍后与一个小网站集成,也有一些屏幕.我们的想法是让用户编辑视频并选择图像,然后与朋友分享他们的结果.

桌面应用程序使用的是C#WPF,即网站 - ASP.Net MVC.

我读到使用MVVM可以更轻松地将应用程序增加到几个屏幕.所以我开始搜索并发现了Caliburn.Micro和MVVM.Light.我已经下载了一些教程,但正如我准备深入研究材料一样,我在SO上找到.那里还有Prism,MEF,Unity,ReactiveUI - 这太过分了!

我学习新东西很糟糕 - 学习WPF和ASP.Net MVC花了我很多年的时间.我不想研究很多新材料,只是为了稍后发现它不相关.而且我没有一位建筑师来指导我.

所以我的问题是:你能否对这些框架和技术进行透视,并建议我应该把重点放在研究和使用上(特别是后来用于Windows 8的内容)?

prism mef unity-container mvvm-light caliburn.micro

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

Unity:在运行时将注册类型替换为其他类型

我们有一个场景,用户可以在运行时选择不同的硬件.在后台我们有几个不同的硬件类,它们都实现了一个IHardware接口.我们希望使用Unity为此接口注册当前选定的硬件实例.但是,当用户选择其他硬件时,这将要求我们在运行时替换此注册.

以下示例可能会更清楚:

public interface IHardware
{
    // some methods...
}

public class HardwareA : IHardware
{
    // ...
}

public class HardwareB : IHardware
{
    // ...
}


container.RegisterInstance<IHardware>(new HardwareA());

// user selects new hardware somewhere in the configuration...

// the following is invalid code, but can it be achieved another way?
container.ReplaceInstance<IHardware>(new HardwareB());
Run Code Online (Sandbox Code Playgroud)

这种行为能以某种方式实现吗?

顺便说一句:我完全清楚,从容器中解决的实例当然不会被新实例替换.我们会通过强迫他们再次解决实例来照顾自己.

dependency-injection unity-container

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

如何用PARAMETER构造函数registerType?

如何使用类型没有NO PARAMETER构造函数的容器注册类型.

实际上我的构造函数接受一个字符串,我通常传入一个表示Path的字符串.

所以当我解决它时会自动创建新类型但是传入一个字符串?

dependency-injection ioc-container unity-container

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

Prism v4:Unity还是MEF?

我下载了Prism v4并运行了安装程序.我进入目录并运行以下两个批处理文件:

  • 仅限桌面 - 使用Mef QuickStart.bat打开模块化
  • 仅限桌面 - 使用Unity QuickStart.bat打开模块化

当我编译这些应用程序时,我没有看到任何真正的区别.我已经搜索了MEF vs Unity,我发现了一些优点/缺点,但没有任何具体说明是否一个人在Prism中使用"更好"(我知道这是主观的).我想也许如果我列出我的要求,有人可以指出我使用的正确技术(即使它不是Prism 4).

  • 该应用程序将使用WPF(不是 Silverlight)编写.
  • 主要应用将非常薄.
  • 主应用程序将使用Web服务来构建一个人可以访问的"apps/modules"菜单.
  • "apps/modules"将完全包含在其他托管库中.
  • 主应用程序通过反映到这些DLL中来获取视图和视图模型.
  • 主应用程序应将日志记录等服务提供给这些"应用程序/模块".

例如:

基本用户可能有以下选项:

  • ViewOnly地址记录

所有相关地址都在Address.dll内.

高级用户可能具有以下选项:

  • 新地址记录
  • 打开地址记录(更新/删除)
  • 管理用户

所有相关地址都在Address.dll内.
管理相关的所有项目都在Admin.dll中.

应用程序不应该实际引用这些DLL中的任何一个,我打算反映它们,以便如果有100个不同的模块,并且用户只能访问其中的2个,则只下载和使用其中的2个.有权访问其中10个的用户获得10个用户.

我已经通过WebService解决了下载DLL.:)

wpf mef unity-container mvvm prism-4

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

IoC在类库中.在哪里引导

我正在使用可以被其他组件重用的类库.在这个类库中,我使用unity来进行依赖注入.对于这个类库,我创建了一个测试项目.调用者也获得了一个测试项目.我不确定的一件事是绑定的位置.我应该在类库中加入它还是应该从调用应用程序中执行此操作?

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

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