标签: unity-container

什么是Unity InjectionConstructor属性?

什么是Unity InjectionConstructor属性及其工作原理?

.net c# unity-container

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

Unity Framework入门

任何人都可以推荐一些良好的资源来开始使用Unity框架吗?我从Codeplex下载了源代码并将其编译.所以现在我有一组已编译的二进制文件,下一步该怎么做?我理解控制反转的原理,但对Unity框架的细节知之甚少.

我已从Codeplex下载了Unity文档,但它似乎针对的是已经具备良好框架知识的用户.

我真正想要的是Unity的一些好的"入门"类型指南,或者一些基本的示例应用程序.

感谢收到好文章,样本或博客的任何指示.

来自RichardOD的好建议: David Hayden的屏幕演员

codeplex inversion-of-control unity-container

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

C#/ Unity中的构造函数注入?

我正在使用C#和Microsoft的Unity框架.我不太清楚如何解决这个问题.这可能与我对Unity缺乏理解DI有关.

我可以使用以下示例代码总结我的问题:

class Train(Person p) { ... }

class Bus(Person p) { ... }

class Person(string name) { ... }

Person dad = new Person("joe");
Person son = new Person("timmy");
Run Code Online (Sandbox Code Playgroud)

当我在Bus上调用resolve方法时,如何确保注入名为'timmy'的Person'onon'并在解析Train时如何确定具有当时名称'joe'的Person'add'得到解决?

我想也许可以使用命名实例?但我不知所措.任何帮助,将不胜感激.

顺便说一句,我宁愿不创建一个IPerson接口.

c# dependency-injection unity-container constructor-injection

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

是应该在代码或配置文件中配置Unity?

Microsoft的Unity依赖注入框架可以通过代码或通过应用程序配置文件(app.config)进行配置.

代码示例:

IUnityContainer container = new UnityContainer()
    .RegisterType<IInterface, ConcreteImplementation>();
Run Code Online (Sandbox Code Playgroud)

配置示例:

<unity>
    <containers>
        <container>
            <types>
                <type type="IInterface, MyAssembly"
                      mapTo="ConcreteImplementation, MyAssembly" />
Run Code Online (Sandbox Code Playgroud)

每种方法有哪些优点/缺点?我可以想到"用户可以轻松配置您的应用程序"的明显优势,以及"用户可以轻松破解您的应用程序"的明显缺点,但是有什么不那么明显吗?

configuration dependency-injection app-config ioc-container unity-container

16
推荐指数
2
解决办法
7387
查看次数

使用Unity拦截对IMyInterface.SomeMethod的所有调用

我正在努力学习Unity拦截器,我正在努力学习它.

说我有这样的界面:

public interface IMyInterface
{
   void SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)

我有一个未知数量的类实现该接口,如下所示:

public class SpecificClass1 : IMyInterface
{
   public void SomeMethod()
   {
       Console.WriteLine("Method Called");
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方式来说,"对于IMyInterface的所有实例(我不想枚举它们),当调用SomeMethod时运行我的拦截器.

这是克拉斯的非列举给我带来麻烦.(如果你能列举所有的课程,有很多例子.)

我读过类型拦截,但我似乎无法找出它是否能满足我的要求.

那里的任何Unity专家都知道如何做我想要的东西?

.net c# unity-container unity-interception

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

如何使用Unity解决静态类中的依赖关系?

我有以下扩展方法,它(自然地)存在于静态类中.

public static class MyExtensions
{
    [Dependency]
    private static IMyDataContext _myDataContext { get; set; }

    public static void MyExtensionMethod(this MyType myType)
    {
        // do stuff

        _myDataContext.DoAwesomeThing();
    }
}
Run Code Online (Sandbox Code Playgroud)

_myDataContext对象为null.

通常我会使用UnityContainer注册类型,但由于这是一个静态类,我不能.

我需要实例化_ myDataContext以便在需要时它不为空?

c# extension-methods unity-container

16
推荐指数
1
解决办法
9680
查看次数

如何解耦IoC框架实现

我一直在学习IoC,依赖注入等,并享受这个过程.对我来说,解耦和编程接口的好处是不费吹灰之力的.

但是,我真的不喜欢将自己绑定到像Unity或Autofac或Windsor这样的特定框架 - 因为我还在学习并且尚未确定哪个最适合我的目的.

那么,我怎么能把像Unity这样的东西包裹起来,这样我以后就可以轻松换掉温莎呢?(管他呢).并且你不敢说用另一个注入第一个;)

谢谢!

R.

Ps我标记Unity,因为这是我目前的个人偏好(我只是在使用Entlib).

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

15
推荐指数
3
解决办法
2514
查看次数

在WPF应用程序中放置和配置IoC容器的位置?

我正在研究中型WPF应用程序(MVVM),该应用程序将来应该是可扩展和可维护的.因此,我决定使用IoC容器(在本例中为Unity)来保持灵活性.

但是我不确定在WPF应用程序中放置和配置Unity的位置.

我想容器应该是全局可访问的,所以应该可以去Application类.但是我应该把它作为静态属性吗?我应该在Application_Startup()事件处理程序中配置它吗?

例如:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    public static UnityContainer MyUnityContainer;


    private void Application_Startup(object sender, StartupEventArgs e)
    {
        // instantiate and configure Unity
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我就能通过static属性从应用程序的任何地方访问容器:

App.MyUnityContainer
Run Code Online (Sandbox Code Playgroud)

我想这是一种方法,但我不确定这个问题是否有更好的做法,特别是对于WPF应用程序.

wpf containers inversion-of-control unity-container where

15
推荐指数
2
解决办法
6015
查看次数

使用存储库模式,工作单元和Unity的实体框架

使用此示例此实现提供的组合,我尝试创建一个解决方案,将UnitOfWork类与各个存储库分离,因为它们违反了开放 - 封闭原则,因为每次添加新存储库时都必须修改UnitOfWork类.我使用Unity作为IoC容器来连接依赖项.

我的问题是,在自动布线构成UnitOfWork,IDbContext和储存库(IEmployeeRepositoryICustomerRepository使用Unity)时,存储库将与的单独实例注入UnitOfWork,其中,当然,失败的目的.我需要在存储库之间共享上下文,似乎我错过了这个难题的一个部分 - 目前(参见服务层),UnitOfWork实例化将与UnitOfWork每个存储库的不同.

如何使用Unity和依赖注入将注入IUnitOfWork到服务层并将此实例化的共享 UnitOfWork类传递到相应的存储库?

这是我提出的(伪造的)解决方案:

public interface IRepository<TEntity> where TEntity : class
{
    TEntity Create();
    // omitted for brevity
}

public class Repository<TEntity> : IRepository<TEntity>
    where TEntity : class
{       
    private readonly DbContext _context;

    public Repository(IUnitOfWork uow)
    {
        _context = uow.Context;
    }

    public virtual TEntity Create(TEntity entity)
    {
        return …
Run Code Online (Sandbox Code Playgroud)

entity-framework inversion-of-control unity-container unit-of-work repository-pattern

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

Microsoft.Practices.Unity包在哪里?

一小时前我更新了我的nuget软件包以找到我正在处理的解决方案,我收到了Unity抛出的错误消息,

类型"IUnityContainer"在未引用的程序集中定义.您必须添加对程序集"Microsoft.Practices.Unity,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 6d32ff45e0ccc69f"的引用.

从那时起,我一直在谷歌上搜索有关这个包的地方的一些有用的信息.文章,围绕它的问题是旧的,处理2.x版本.

Nuget没有这样的包裹.

我安装了Unity堆栈下面列出的软件包:

  <package id="Unity" version="4.0.2" targetFramework="net452" />
  <package id="Unity.ServiceLocator" version="2.0.0" targetFramework="net452" />
  <package id="Unity.WebAPI" version="5.2.3" targetFramework="net452" />
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

.net c# unity-container nuget

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