什么是Unity InjectionConstructor属性及其工作原理?
任何人都可以推荐一些良好的资源来开始使用Unity框架吗?我从Codeplex下载了源代码并将其编译.所以现在我有一组已编译的二进制文件,下一步该怎么做?我理解控制反转的原理,但对Unity框架的细节知之甚少.
我已从Codeplex下载了Unity文档,但它似乎针对的是已经具备良好框架知识的用户.
我真正想要的是Unity的一些好的"入门"类型指南,或者一些基本的示例应用程序.
感谢收到好文章,样本或博客的任何指示.
来自RichardOD的好建议: David Hayden的屏幕演员
我正在使用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
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
我正在努力学习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专家都知道如何做我想要的东西?
我有以下扩展方法,它(自然地)存在于静态类中.
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以便在需要时它不为空?
我一直在学习IoC,依赖注入等,并享受这个过程.对我来说,解耦和编程接口的好处是不费吹灰之力的.
但是,我真的不喜欢将自己绑定到像Unity或Autofac或Windsor这样的特定框架 - 因为我还在学习并且尚未确定哪个最适合我的目的.
那么,我怎么能把像Unity这样的东西包裹起来,这样我以后就可以轻松换掉温莎呢?(管他呢).并且你不敢说用另一个注入第一个;)
谢谢!
R.
Ps我标记Unity,因为这是我目前的个人偏好(我只是在使用Entlib).
c# enterprise-library dependency-injection inversion-of-control unity-container
我正在研究中型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应用程序.
使用此示例和此实现提供的组合,我尝试创建一个解决方案,将UnitOfWork类与各个存储库分离,因为它们违反了开放 - 封闭原则,因为每次添加新存储库时都必须修改UnitOfWork类.我使用Unity作为IoC容器来连接依赖项.
我的问题是,在自动布线构成UnitOfWork,IDbContext和储存库(IEmployeeRepository和ICustomerRepository使用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
一小时前我更新了我的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)
任何帮助表示赞赏!
unity-container ×10
c# ×6
.net ×3
app-config ×1
codeplex ×1
containers ×1
nuget ×1
unit-of-work ×1
where ×1
wpf ×1