asp.net এমভিসি নিয়ন্ত্রকদের একটি পৃথক প্রকল্পে রাখে


107

আমি কেবল এসপ নেটওয়্যার এমভিসি শিখছি এবং আমি কীভাবে আমার কন্ট্রোলারদের একটি আলাদা প্রকল্পে স্থানান্তর করতে পারি তা জানার চেষ্টা করছি। সাধারণত আমি যখন আগে এসপ নেট ওয়েব অ্যাপস ডিজাইন করেছি তখন আমি আমার মডেলগুলির জন্য একটি প্রকল্প তৈরি করেছি, অন্যটি আমার যুক্তির জন্য এবং তারপরে ওয়েবটি ছিল was

এখন যেহেতু আমি এসপ নেটওয়্যার এমভিসি শিখছি আমি একই ধরণের প্যাটার্ন অনুসরণ করার এবং মডেলগুলি এবং নিয়ন্ত্রকদের প্রত্যেককে তাদের নিজস্ব পৃথক প্রকল্পে রাখার প্রত্যাশা করছিলাম এবং ওয়েবে কেবল ভিউ / স্ক্রিপ্ট / সিএসএস রেখে যাব। মডেলগুলির অংশটি সহজ ছিল, তবে যা আমি বুঝতে পারি না তা হল কীভাবে একটি পৃথক প্রকল্পে আমার কন্ট্রোলারদের "সন্ধান" করা যায়। এছাড়াও, আমি এটি পরামর্শদায়ক কিনা তা জানতে চাই। ধন্যবাদ!

উত্তর:


92

প্রথমত, আপনার মডেলটিকে একটি পৃথক প্রকল্পে স্থাপন করা অবশ্যই একটি ভাল ধারণা। যেমন আপনি আবিষ্কার করেছেন, এটি তুচ্ছ।

নিয়ন্ত্রক এবং দৃষ্টিভঙ্গি সম্পর্কিত, আমি বেশিরভাগ বেসিক প্রকল্পগুলির জন্য তাদের আলাদা করার কোনও সুস্পষ্ট সুবিধা দেখতে পাচ্ছি না, যদিও আপনার কোনও নির্দিষ্ট অ্যাপ্লিকেশনটিতে এটি করার প্রয়োজন হতে পারে।

আপনি যদি এটি করতে পছন্দ করেন, তবে আপনাকে কীভাবে আপনার নিয়ন্ত্রণকারীদের সন্ধান করতে হবে তার কাঠামোটি আপনাকে বলতে হবে। এটি করার প্রাথমিক উপায় হ'ল আপনার নিজস্ব কন্ট্রোলার ফ্যাক্টরি সরবরাহ করা। এটি কীভাবে হয় তার জন্য ধারণা পেতে আপনি ডিফল্ট নিয়ন্ত্রণকারী কারখানার উত্স কোডটি একবার দেখে নিতে পারেন। এই শ্রেণীর সাবটিপিং এবং গেটকন্ট্রোলার টাইপ (স্ট্রিং কন্ট্রোলারনাম) পদ্ধতিটিকে ওভাররাইড করা আপনি যা জিজ্ঞাসা করছেন তা সম্পাদন করতে যথেষ্ট।

একবার আপনি নিজের কাস্টম কন্ট্রোলারফ্যাক্টরি তৈরি করার পরে, ফ্রেমওয়ার্কটি এটি কোথায় খুঁজে পাবেন তা বলতে আপনি গ্লোবাল.এক্সে অ্যাপ্লিকেশন_স্টার্টটিতে নিম্নলিখিত লাইনটি যুক্ত করুন:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

আপডেট: আরও তথ্যের জন্য এই পোস্টটি এবং এর সাথে লিঙ্কযুক্ত পোস্টগুলি পড়ুন । ফিল হ্যাকের এই পোস্ট সম্পর্কে মন্তব্য সম্পর্কে:

ControllerBuilder.Current.DefaultNamespaces.Add(
    "ExternalAssembly.Controllers");

... যা সম্পূর্ণ সমাধান নয়, তবে সাধারণ ক্ষেত্রে এটি যথেষ্ট ভাল।


2
ধন্যবাদ ক্রেগ! এটি ঠিক আমি যা খুঁজছিলাম। এই তথ্য এমনকি ওয়েবে বিদ্যমান? আমি অনেক ভাগ্য নিয়ে এর জন্য পুরোপুরি গুগল করছি। স্ট্যাকওভারফ্লো আবার আসে!
অ্যারন পামার 21

11
আমি সম্মত, কন্ট্রোলাররা ব্যবহারকারীদের ইনপুট পরিচালনা করে, মডেলকে ম্যানিপুলেট করে, তারপরে ডেটা ভিউতে প্রেরণ করে। এগুলি সাধারণত একটি অ্যাপ্লিকেশনের সাথে খুব নির্দিষ্ট। অ্যাপের সাথে সুনির্দিষ্ট নয় এমন কোনও যুক্তি একটি গ্রন্থাগার বা মডেল থেকে ভাল হতে পারে। তবে সাধারণভাবে নিয়ন্ত্রকদের ওয়েব প্রকল্পের সাথে থাকা উচিত be
হ্যাক

2
আমার একটি ত্রুটি নিয়ামক এবং ভিউ রয়েছে যা দুটি অ্যাপ্লিকেশানের মধ্যে অভিন্ন। উভয় অ্যাপ্লিকেশনই ব্যবহার করতে পারে এমন একক সমাবেশে এটি থাকা আমার কাছে বোধগম্য।
জুডো

3
নিয়ামকগণ যখন আলাদা প্রকল্পে থাকবেন তখন কি নিয়ন্ত্রকদের পরীক্ষা করা এবং আইওসি ব্যবহার করা সহজ নয় - এটিই মূল কারণ হবে
স্যামুয়েল জি

1
@ শেভ, আমি মনে করি না যে এটি সেখানে কোনও পার্থক্য করে। আপনার কন্ট্রোলারদের পরীক্ষার যোগ্যতার সাথে আপনি কীভাবে কোড করেন , যেখানে তারা থাকেন
ক্রেগ স্টান্টজ

19

আপনার নিজের কন্ট্রোলার ফ্যাক্টরিটি তৈরি করা যুক্তিসঙ্গত হলেও, আমি প্রতিটি প্রকল্পে আমার সমস্ত কন্ট্রোলারকে সংজ্ঞায়িত করতে আরও সুবিধাজনক বলে মনে করেছি তবে সেগুলি আমার ভাগ করা প্রকল্পের কন্ট্রোলারদের কাছ থেকে পেয়েছি:

namespace MyProject1.Controllers
{
   public class MyController : MySharedProject.Controllers.MyController
   {
      // nothing much to do here...
   }
}

namespace MySharedProject.Controllers
{
   public abstract class MyController : System.Web.Mvc.Controller
   {
      // all (or most) of my controller logic here...
   }
}

এটির সাথে অতিরিক্ত বেনিফিট রয়েছে যা আপনার কন্ট্রোলার যুক্তি যুক্ত করার মতো একটি জায়গা রয়েছে যা প্রকল্পের চেয়ে প্রকল্পের চেয়ে আলাদা। এছাড়াও, অন্যান্য বিকাশকারীদের পক্ষে আপনার কন্ট্রোলার যুক্তিটি দ্রুত খুঁজে পাওয়া সহজ, কারণ নিয়ামকগুলি স্ট্যান্ডার্ড জায়গায় উপস্থিত রয়েছে।

এটি পরামর্শজনক কিনা তা সম্পর্কে, আমি মনে করি এটি একেবারেই is আমি এমন কিছু সাধারণ অ্যাকাউন্ট ম্যানেজমেন্ট লজিক তৈরি করেছি যা আমি অন্যান্য প্রকল্পগুলির মধ্যে ভাগ করতে চাই যা অন্যথায় খুব বিজনেস যুক্তিযুক্ত। সুতরাং আমি আমার অ্যাকাউন্ট এবং প্রশাসক কন্ট্রোলারগুলি ভাগ করছি, তবে অন্যান্য কন্ট্রোলাররা তাদের নিজ নিজ প্রকল্পের জন্য সুনির্দিষ্ট।


1
এটি খুব ভালভাবে কাজ করেছে, তবে রাউটিংয়ের ত্রুটি রোধ করতে আমাকে কিছু অপ্রয়োজনীয় কোডটি সরিয়ে ফেলতে হয়েছিল
কেন ম্যাক

হাই, আমি কীভাবে এই ধরণের প্রকল্পে রাউটিং পরিচালনা করতে পারি? আমি অ্যাট্রিবিউট রাউটিংটি ব্যবহার করতে চাই ...
মুহম্মদ

আপনি যেমনটি সাধারনত তেমন বৈশিষ্ট্যযুক্ত রাউটিং ব্যবহার করতে পারেন।
এইগুই 31'17

2
নিশ্চিত না কেন এটিতে আরও বেশি অগ্রগতি নেই ... স্বীকৃত উত্তরের চেয়ে অনেক বেশি মার্জিত, আমি মনে করি। ধন্যবাদ!
জুলাই

এটি আমার পক্ষে কাজ করে না। আপনি কি বলতে পারবেন এটি। নেট কোর বা। নেট ফ্রেমওয়ার্ক?
হোমায়ুন বেহজাদিয়ান

4
  • আপনার এমভিসি প্রকল্পের জন্য ক্লাস লাইব্রেরি যুক্ত করুন।
  • ক্লাসে নিম্নলিখিত কোড যুক্ত করুন (আপনার নিয়ন্ত্রক কোডের জন্য)

    namespace ContactController
    {
    public class ContactController : Controller
    {
        public ActionResult Call()
        {
            ViewBag.Title = "Inside MyFirst Controller.";
            return View();
        }
    }

    }

  • এমভিসি প্রজেক্ট ভিউ ফোল্ডারে যোগাযোগের জন্য ফোল্ডার যুক্ত করুন এবং একটি কল.সিএসটিএমএল ফাইল তৈরি করুন। ফোল্ডার দেখুন

  • আপনার মূল এমভিসি প্রকল্পে শ্রেণিকালীন গ্রন্থাগার প্রকল্পের রেফারেন্স যুক্ত করুন।

উল্লেখ

  • অবশেষে যোগাযোগের নিয়ন্ত্রকের নাম স্থানটি রুট কনফিগারেশনে উল্লেখ করুন।

RouteConfig


3
এটি সামান্য দুর্ভাগ্যজনক যে আপনার নিয়ামকের মতো একই নামের স্থানের নাম রয়েছে।
মারিউজ জামরো

3

আমি System.Web.Mvcনিউগেট রেফারেন্স আপডেট করার পরে আমার সমস্যার সমাধান হয়েছে যাতে এমভিসিওয়েবসাইট এবং ক্লাস লাইব্রেরি একই System.Web.Mvcসংস্করণ ব্যবহার করে

ডিফল্ট নেমস্পেস যুক্ত করার দরকার নেই


সমস্যাটি ছিল এমভিসি ওয়েবেসাইট ব্যতিক্রম করেনি যদিও বর্তমান এমভিসি অ্যাসেম্বলির ক্লাস লাইব্রেরির রেফারেন্সযুক্ত
এমভিসি

1

আমি যে বিচ্ছিন্নতার সহজ রূপটি ব্যবহার করি তা হ'ল আসল এমভিসি প্রকল্পে ভিউগুলি "যেমন আছে" বজায় রাখা তবে নিয়ন্ত্রণকারীদের অপসারণ করা। তারপরে একটি নতুন শ্রেণিবদ্ধ প্রকল্পে কন্ট্রোলার ক্লাস যুক্ত করুন এবং নিশ্চিত করুন যে তারা নিয়ামকের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে।

এমভিসি রাউটিং ইঞ্জিনটি স্বয়ংক্রিয়ভাবে ক্লাসলিবারিতে নিয়ন্ত্রকদের দিকে যাত্রা করবে এবং কন্ট্রোলাররা স্বয়ংক্রিয়ভাবে মূল এমভিসি প্রকল্প থেকে দৃশ্যগুলি তৈরি করবে, আপনি যদি আপনার রেফারেন্স এবং স্থানে সঠিকভাবে ব্যবহার করেন provided

আমি এই আর্কিটেকচারটি এইচটিএমএল প্রতিবেদন মডিউল বাস্তবায়নের জন্য ব্যবহার করছি যা মূল সমাধান থেকে পৃথক করে সংকলন এবং স্থাপন করা যেতে পারে। শেষ পর্যন্ত আমি এসএসআরএস থেকে মুক্ত!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.