时间: 2020-11-21|57次围观|0 条评论

Unity这个微软自家出的依赖注入,相信很多人都应该听过了,不过貌似现在很少中文的教程,唉,本人E文不好。。只学到点皮毛。

而公司的网站也是采用Unity来做依赖注入的,在这里就分享一个小Demo出来,希望大家能对Unity有个了解。虽然Spring.Net的也挺好用的,

不过本人有严重的微软癖,所以还是用微软的。

1.首先当然是先下载Unity,找不到的可以上google搜索。

2.为Web项目添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll两个引用。

3.在web.config文件中的configSections中添加如下节点

<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.1.0.0,                  Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

4.在web.config文件中的configuration中添加如下节点

    
<!--
具体的Untiy配置项
-->

    

<
unity
>

        

<
containers
>

            

<
container 
name
="Service"
>

                

<
types
>

                    

<
type 
type
="TestUnity.ITest,TestUnity"
 mapTo
="TestUnity.Test,TestUnity"
/>

                

</
types
>

            

</
container
>

            

<
container 
name
="Repository"
>

                

<
types
>

                    

<
type 
type
="TestUnity.IRepo,TestUnity"
 mapTo
="TestUnity.Repo,TestUnity"
/>

                

</
types
>

            

</
container
>

        

</
containers
>

    

</
unity
>

    

<!--
结束untiy
-->

 container中的name是随便起,type中的type是对应的接口,要把命名空间也加上去,mapTo是接口对应的实现类

之后添加一个类UnityContext,如下:

    
public
 
class
 UnityContext
    {
        

public
 
static
 UnityContext _instance;

        
private
 UnityContainer _container;

        
public
 
static
 UnityContext Instance
        {
            

get

            {
                

if
 (_instance 
==
 
null
) _instance 
=
 
new
 UnityContext();
                

return
 _instance;
            }
        }

        
///
 
<summary>

        

///
 构造函数
        

///
 
</summary>


        
public
 UnityContext()
        {
            _container 

=
 
new
 UnityContainer();
            UnityConfigurationSection setion 

=
 (UnityConfigurationSection)ConfigurationManager.GetSection(
"
unity
"
);
            setion.Containers[

"
Service
"
].Configure(_container);
            setion.Containers[

"
Repository
"
].Configure(_container);
        }

        
public
 T Load
<
T
>
()
        {
            

return
 _container.Resolve
<
T
>
();
        }
    }

 这是一个简单的单例模式的管理Unity的类。。。写得有点烂。。。其中"Service"和"Repository"就是对应配置文件中的container的name属性。

public T Load<T>()方法是返回指定类型接口的实现对象。

 调用的话,如下:

            ITest test 
=
 UnityContext.Instance.Load
<
ITest
>
();
            IRepo repo 

=
 UnityContext.Instance.Load
<
IRepo
>
();
            

string
 hell 
=
 test.SayHello();
            

string
 hi 
=
 repo.SayHi();

 其中ITest,Test,IRepo,Repo为接口与对应的实现类,都是只有简单返回一个"Hello"或者"Hi"的方法。只是为了测试。

这样的话,基本上就完成了。。至于好处嘛,其实我不太清楚,可能是降低耦合吧。。还有很多不懂的地方。写得很烂,只是希望有个启发各位的效果。有什么不足和不对的地方希望各位多多指教。

下面是我用的:

1.Asp.net MVC框架

2.LinQ to SQL框架

3.Unity1.1


转载于:https://www.cnblogs.com/floyd/archive/2009/06/17/1505117.html

原文链接:https://blog.csdn.net/weixin_30342827/article/details/96266289

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《Unity+单例模式的依赖注入
   

还没有人抢沙发呢~